问题:检查一个非负整数的形式,2^j - 2^k where j>=k>=0
即 2 的幂差。我的解决方案:该数字n (say)
可以表示为 1 的连续序列for eg. 00011110
。我将关闭 1 的连续序列(最右边)并对n
. 我在这里所做的是,steps for solution
00011110
00011111(turn on trailing 0's)
00000000(then turn off trailing 1's)
. 使用这个公式(x | (x - 1)) & ((x | (x - 1)) + 1)
。但是一个不使用文字的更有效的公式(可能是因为操作次数较少)((x & -x) + x) & x
后面跟着一个零检查。而且我无法理解这一点,但它被写成它做同样的事情,但无法从我的结果中得出公式。谁可以给我解释一下这个?
编辑:32 位字,2 的补码