ホームページ > バックエンド開発 > C++ > 数値が2の電力であるかどうかをどのように効率的に判断できますか?

数値が2の電力であるかどうかをどのように効率的に判断できますか?

Barbara Streisand
リリース: 2025-01-29 19:21:10
オリジナル
944 人が閲覧しました

How Can We Efficiently Determine if a Number is a Power of 2?

数の数字が2

かどうかを判断します

問題の説明

指定された数値が2のパワーであるかどうかを判断します。これには、単純で正確なアルゴリズムが必要です。著者は2つのアルゴリズムを提案しますが、数値の計算を使用すると問題が発生しました。

最初のアルゴリズム

最初のアルゴリズム単純なサイクルを使用して、変位を介して2のパワーを確認します。

この方法はシンプルで理解しやすく、

値に対して完全に実行できます。 IsPowerOfTwo

2番目のアルゴリズム
<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>
ログイン後にコピー
数値から1を減算してすべての1から0を回し、すべてを0から1に回します。

数値が2の電力である場合、バイナリは1桁のみがあることを示します。

数と(x -1)が実行され、操作が実行されると、右端の1を除くすべてのビットは0になります。

したがって、結果が0の場合、数は2のパワーです。
  • &ゼロを削除します
  • ゼロを排除するために(ゼロ-Not -Considered Powerは2)、追加の条件

以上が数値が2の電力であるかどうかをどのように効率的に判断できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート