要测试一个无符号整数是否为2^n-1
形式,我们使用:
x&(x+1)
那应该等于什么?那是,
x&(x+1) == ?
最佳答案
作为对现有答案的补充,以下是简短解释为什么数字x
的形式不是0b00000
(零)或0b0111..11
(所有最低位,都是n> 0的所有数字2 ^ n-1)没有属性x&(x+1) == 0
。
对于形式为x
的数字0b????1000..00
,x+1
的位数与x
相同,除了最低有效位,因此x & (x+1)
至少设置了一位,该位显示为x
中的设置。通过简短的解释:
x 0b????1000..00
x+1 0b????1000..01
x&(x+1) 0b????10000000
对于
x
形式的数字0b????10111..11
:x 0b????10111..11
x+1 0b????110000000
x&(x+1) 0b????10000..00
总之,如果
x
既不为零,也不以二进制形式写入所有最低位,则x&(x+1)
也不为零。