找到给定数字'n'的最快方法可以绝对表示为2 ^ m

时间:2010-08-15 19:08:47

标签: algorithm

  

可能重复:
  How to check if a number is a power of 2

找到给定数字'n'的最快方法可以表示为2 ^ m

ex:16= 2^4

天真的解决方案:将给定数字除以2,直到余数变为0(如果成功)或少于2(如果不成功)

有人能告诉我最新的另一种计算方法吗?

1 个答案:

答案 0 :(得分:13)

最快的方式:

if (n != 0 && (n & (n - 1)) == 0)

如果数字是2的幂,它将以二进制表示为1,后跟m个零。减去1之后,它将只是m个。例如,取m = 4(n = 16)

10000 binary = 16 decimal
01111 binary = 15 decimal

执行按位“和”,你会得到0.所以在这种情况下它给出了正确的结果。

现在假设某些m的n 正好2 m 。然后从中减去一个不会影响最高位 ...所以当你“和”nn-1时,最后一位仍然会被设置,所以结果不会是0.所以也没有误报。

编辑:我最初没有进行n != 0测试...如果n为零,则n & anything将为零,因此会出现误报。