在二进制补码表示中,关于2的幂的独特之处在于它们由全0位组成,除了第k位,其中n = 2 ^ k:
base 2 base 10
000001 = 1
000010 = 2
000100 = 4
...
要获得二进制补码的负值,可以翻转所有位并添加一个。 对于2的幂,这意味着你在左边得到一堆1,包括正值的1位,然后是右边的一堆0:
n base 2 ~n ~n+1 (-n) n&-n
1 000001 111110 111111 000001
2 000010 111101 111110 000010
4 000100 111011 111100 000100
8 001000 110111 111000 001000
您可以很容易地看到第2列和第4列的结果与第2列相同。
如果你看一下这个图表中缺少的其他值,你可以看出为什么除了两个权力之外没有任何东西:
n base 2 ~n ~n+1 (-n) n&-n
1 000001 111110 111111 000001
2 000010 111101 111110 000010
3 000011 111100 111101 000001
4 000100 111011 111100 000100
5 000101 111010 111011 000001
6 000110 111001 111010 000010
7 000111 111000 111001 000001
8 001000 110111 111000 001000
n&-n将(对于n> 0)仅设置1位,该位将是n中的最低有效位。 对于所有2的幂次数,最低有效设置位是唯一的设置位。 对于所有其他数字,有多个位集,其中只有最低有效位将在结果中设置。