Jam*_*lis 7

许多形式2^n-1将所有位都设置为第n位.例如,2^3-1(7)是:

0b0111
Run Code Online (Sandbox Code Playgroud)

如果我们添加一个,我们得到8:

0b1000
Run Code Online (Sandbox Code Playgroud)

然后,执行按位,我们看到我们得到零,因为两个数字都没有设置位.如果我们从不是表单的数字开始2^n+1,那么结果将是非零的.

  • 虽然你和另一个回答者很好地解释了为什么`x&(x + 1)== 0`对于`x`必须是'2 ^ n-1'的形式,你们都没有提到财产的充足性.或者换句话说,为什么不能写成`0b0111..11`的数字`x`不具有属性`x&(x + 1)== 0`? (2认同)

Pas*_*uoq 6

作为现有答案的补充,这里有一个简短的解释,为什么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
Run Code Online (Sandbox Code Playgroud)

对于许多x形式0b????10111..11:

x       0b????10111..11
x+1     0b????110000000
x&(x+1) 0b????10000..00
Run Code Online (Sandbox Code Playgroud)

总之,如果x不是零或以二进制形式写入所有最低位,则x&(x+1)不是零.

  • +1因为解释的双方都很重要! (2认同)

Jus*_*eff 5

零.如果X是2 ^ N-1,则它是二进制的1的完整字符串.除此之外是1后跟一串与X相同长度的零,因此这两个数字在任何位置都没有共同的1位,因此两者的AND为零.