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

标签 algorithm

<分区>

Possible Duplicate:
How to check if a number is a power of 2

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

例如:16= 2^4

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

谁能告诉我另一种最快的计算方法是什么?

最佳答案

最快的方法:

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 正好是 2m。然后从中减去 1 不会影响最高位...所以当你“和”在一起时 nn-1 最高位位仍将被设置,因此结果不会为 0。因此也没有误报。

编辑:我最初没有 n != 0 测试...如果 n 为零,则 n & anything 将为零,因此你得到误报。

关于algorithm - 找到给定数字 'n' 的最快方法可以绝对表示为 2^m,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3488809/

相关文章:

javascript - 自动放置流程图形状的算法

javascript - 如何检查一个字符串是否完全由相同的子字符串组成?

arrays - 合并 n 个数组 A1..An,每个数组 Ai 是 {1..i} 的随机子集

java - 改进去除元素的算法

c - 实现基于整数的幂函数 pow(int, int) 的最有效方法

algorithm - 如何找到包含用户选择的所有 POI(在指定半径内)的 POI 集群?

比较两个版本的Javascript函数

javascript - 查找给定位置的最近餐厅

java - 在 Java 中使用数组的更好的最小值和最大值算法

algorithm - 按 Lua 中的嵌套值对表进行排序