数の数字が2
指定された数値が2のパワーであるかどうかを判断します。これには、単純で正確なアルゴリズムが必要です。著者は2つのアルゴリズムを提案しますが、数値の計算を使用すると問題が発生しました。
最初のアルゴリズム
最初のアルゴリズム単純なサイクルを使用して、変位を介して2のパワーを確認します。
この方法はシンプルで理解しやすく、値に対して完全に実行できます。 IsPowerOfTwo
<code class="language-c#">private bool IsPowerOfTwo(ulong number) { if (number == 0) return false; for (ulong power = 1; power > 0; power = power << 1) { if (power == number) return true; if (power > number) return false; } return false; }</code>
ulong
数字の計算に依存している2番目のアルゴリズム:
ただし、破棄の問題により、このアルゴリズムは922372036854775809を適切に処理することはできません。 改善されたアルゴリズム
IsPowerOfTwo_2
<code class="language-c#">private bool IsPowerOfTwo_2(ulong number) { double log = Math.Log(number, 2); double pow = Math.Pow(2, Math.Round(log)); return pow == number; }</code>
この改善されたアルゴリズムは、ビット操作を巧みに使用します:
ビット演算子対応する位置の2ビットが1かどうかを確認します。
<code class="language-c#">bool IsPowerOfTwo(ulong x) { return (x & (x - 1)) == 0; }</code>
数値が2の電力である場合、バイナリは1桁のみがあることを示します。
数と(x -1)が実行され、操作が実行されると、右端の1を除くすべてのビットは0になります。したがって、結果が0の場合、数は2のパワーです。
&
ゼロを削除します以上が数値が2の電力であるかどうかをどのように効率的に判断できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。