多くの数字が2 質問: フローティングポイント操作または変位操作を使用せずに、指定された数値が2であるかどうかを効率的に判断する方法は?
回答:
シンプルで効率的なアルゴリズムは次のとおりです。
説明:
ビットと各桁のコンポーネント(&)の比較の両方の数字が1の場合、1、戻る1、それ以外の場合は0。数値から1を縮小することにより、バイナリ番号を作成します。最小有効位置(元の数字に設定されたビットが1に設定)は1に設定されます。元の数値が2の電力である場合、マイナス1は最高の設定位置の右側のすべての位置を削除し、操作と操作の結果は0になります。それどころか、元の数値が2の電力でない場合、1つの減算後、数値のバイナリ表現は少なくとも2ビット1に設定され、結果と操作が非ゼロ値になります。 。例:
<code class="language-c#">bool IsPowerOfTwo(ulong number) { return (number != 0) && ((number & (number - 1)) == 0); }</code>
番号8を考慮してください(バイナリ1000)。 1を減らして7(バイナリ0111)が1.8と7のビットと7セットしかありません。
注:上記のアルゴリズムは0にtrueを返し、0は2のパワーではありません。 0を除外する場合は、次のようにアルゴリズムを変更できます。
以上が数値が2の電力であるかどうかを効率的に判断する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。