因此,如果我正确理解按位运算,
num = 1 << 4
通过在数字的 lsb 一侧添加 0,将 1 向左移动 4 个位置,如果有 1,则将其更改为 0。
但是如果我这样做
num |= 1 << 4
,它是把 1 与正在移动到的位置上的位进行“或”,还是将 0 与途中的位进行“或”?
我知道使用 |= 可以保持 1 的完整性,但我只想知道其功能
您对按位运算的理解是正确的。
在表达式
num |= 1 << 4
中,<<
运算符将 1
向左移动四个位置,就像在 num = 1 << 4
中一样。因此,它会产生二进制的 00010000
。
|
运算符执行按位或运算。当您使用 num |= 1 << 4
时,它可以有效地将 num 中的现有位与值 1 << 4. It doesn't change any bits that are already set to 1 in num. It only changes the bit at the fourth position from the right (counting from 0
) 到 1
中的位进行或运算,因为它是 1 << 4
中设置的唯一位。
其工作原理如下:
num 的初始值:假设 num 最初是二进制的
00101010
。
1 << 4
结果为 00010000
。
|
运算执行按位或,因此得到num
,并将右数第四位设置为1
,所有其他位保持不变。
所以,
num
的最终值将是00111010
,
如果你这样做了
num = 1 << 4
,num
的值就会变成00010000
。
综上所述,
num |= 1 << 4
将指定位置的位设置为1,而不改变num中的其他位。