要测试一个无符号整数是否为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..00x+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)也不为零。

10-04 21:58