可能重复:
如何检查数字是否为2的幂
找到给定数字'n'的最快方法可以表示为2 ^ m
例如: 16= 2^4
天真的解决方案:将给定数字除以2,直到余数变为0(如果成功)或少于2(如果不成功)
有人能告诉我最新的另一种计算方法吗?
Jon*_*eet 13
最快的方式:
if (n != 0 && (n & (n - 1)) == 0)
Run Code Online (Sandbox Code Playgroud)
如果数字是2的幂,则它将以二进制表示为1,后跟m个零.减去1之后,它将只是m个.例如,取m = 4(n = 16)
10000 binary = 16 decimal
01111 binary = 15 decimal
Run Code Online (Sandbox Code Playgroud)
执行按位"和",你将得到0.所以它在这种情况下给出了正确的结果.
现在假设n
是不是正好2 米为几μm.然后从中减去一个不会影响顶部位 ...所以当你"和"在一起n
并且n-1
顶部位仍然会被设置时,结果不会是0.所以也没有误报.
编辑:我原本没有n != 0
测试...如果n为零,那么n & anything
将为零,因此你会得到误报.