java中n =2_java - 为什么如果(n&-n)== n那么n是2的幂?

在二进制补码表示中,关于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的幂次数,最低有效设置位是唯一的设置位。 对于所有其他数字,有多个位集,其中只有最低有效位将在结果中设置。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值