Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我需要将任何数字 x 到 0 的 2 的幂相加。如果 x=6,则所需的总和为 2pow6+2pow5+.....1。虽然我总是可以使用 Math.pow 编写一个算法来减少到 0 - 这个函数在循环中的性能方面似乎是臭名昭著的。如果有人可以帮助使用移位二元运算符实现相同的目标,我将不胜感激 - 我听说它们比 pow 更有效。
2^n + 2^(n-1) + 2^(n-2) + ... + 2 + 1 = (2^(n+1) - 1) =((1 << (n+1)) - 1)
((1 << (n+1)) - 1)
您不必在循环中计算它,您尝试计算的内容相当于
Math.pow(2, x+1) - 1
更好的是,您可以像 Torquestomp 建议的那样计算它,这样会更快:
(1 << (x + 1)) - 1