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