找到给定数字'n'的最快方法可以表示为2 ^ m
ex:16= 2^4
天真的解决方案:将给定数字除以2,直到余数变为0(如果成功)或少于2(如果不成功)
有人能告诉我最新的另一种计算方法吗?
答案 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 。然后从中减去一个不会影响最高位 ...所以当你“和”n
和n-1
时,最后一位仍然会被设置,所以结果不会是0.所以也没有误报。
编辑:我最初没有进行n != 0
测试...如果n为零,则n & anything
将为零,因此会出现误报。