bit twiddling:将非负整数作为2的幂的差进行检查

问题描述 投票:0回答:1

问题:检查非负整数是否具有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的补码

bit-manipulation bit boolean-logic boolean-operations boolean-algebra
1个回答
0
投票

鉴于-x~x + 1,如果数字的格式为2 ^ j-2 ^ k,则:

© www.soinside.com 2019 - 2024. All rights reserved.