この記事では、指定された数値のすべての交互ビットを交換し、結果の数値を返すコード ソリューションについて説明します。この問題をビット演算の概念を使って、ループを使わずに一定時間で解くようにしてみます。
問題ステートメント-数値nが与えられているので、互いに隣接するビットのペアを交換する必要があります。
言い換えれば、奇数に配置されたすべてのビットを、隣接する偶数に配置されたビットと交換する必要があります。
制約: 問題を解決する際、この問題にはループを使用できないこと、O(1) 時間計算量のみでコードを実行する必要があることに留意する必要があります。
###例### 入力− n = 10011110
出力- 偶数ビットと奇数ビットを交換した後、 取得した 2 進数: 01101101
入力− n = 10011110
出力- 偶数ビットと奇数ビットを交換した後、 取得した 2 進数: 01101101
説明− 理解を深めるために、前の例を考えてみましょう。
リーリー結果として、偶数位置のビットが奇数位置にあることが必要であり、その逆も同様です。
奇数位置の偶数位置ビットの場合、偶数位置を 1 位置右にシフトする必要があります。
したがって、偶数の位置にあるビットの場合は、E >> 1 を変更するだけで、目的の位置が得られます。
同様に、奇数ビットの目的の位置を取得するには、奇数位置ビットを 1 位置だけ左シフトする必要があります。
したがって、奇数のビットの場合は、O 次の問題は、奇数位置ビットと偶数位置ビットを抽出することです。
###みなさんご存じのとおり、### リーリー
したがって、n から E を抽出するには、を実行するだけです。 リーリー
同様に、n から O を抽出するには、-を実行する必要があります。 リーリー
ここで、スワップされた出力を見つけるには、###ステップ###
必要な手順は次のとおりです-E >> 1 O
Example
このメソッドのコードは次のとおりです:
以上が2バイトごとに2ビットごとに交換するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。