为什么我必须在清除一点时使用〜运算符?
这个问题在这里已经有了答案:
如果你想在右侧排第三位:
Y : 01001000
1 << 2 : 00000100
Y | (1 << 2) : 01001100 The | is OR, bits are set to 1 if any is 1.
如果你想删除该位:
1 << 2 : 00000100
~(1 << 2) : 11111011 The ~ is NOT, bits are inversed
Y : 01001100
Y & ~(1 << 2) : 01001000 The & is AND, bits are set to 1 if both are 1.
我建议你阅读更多关于按位运算符的信息
不, ~
无关与解释数为负:波浪~
运营商解释号位的模式,它然后反转(即那些和用零替换原有零)。 实际上,如果将~
应用于无符号值,结果将保持为正值。
回想一下, 1 << k
表达式在由k
指定的位置产生一个全零和一个1
的模式。 这是一个位掩码,可用于通过应用OR操作强制位k
在位1
。
现在考虑一下当你应用~
时会发生什么:所有的0
秒将变为1
秒,唯一的1
将变成零。 因此,结果是一个适用于通过应用AND操作强制单个位为零的位掩码。
~
运算符将所有0都变为1,将所有1都变为0。 为了清除你想要的位置n中的bint,它将在第n个位置中全部为1,并且将其移到第n个位置,以便将一个位移到第n个位置,并且~
反转所有位。
上一篇: Why must I use the ~ operator when clearing a bit?
下一篇: C++ Remove first Bit