ホームページ > バックエンド開発 > C++ > 2バイトごとに2ビットごとに交換する

2バイトごとに2ビットごとに交換する

WBOY
リリース: 2023-09-11 23:01:02
転載
1456 人が閲覧しました

2バイトごとに2ビットごとに交換する

この記事では、指定された数値のすべての交互ビットを交換し、結果の数値を返すコード ソリューションについて説明します。この問題をビット演算の概念を使って、ループを使わずに一定時間で解くようにしてみます。

問題ステートメント-数値nが与えられているので、互いに隣接するビットのペアを交換する必要があります。

言い換えれば、奇数に配置されたすべてのビットを、隣接する偶数に配置されたビットと交換する必要があります。

制約: 問題を解決する際、この問題にはループを使用できないこと、O(1) 時間計算量のみでコードを実行する必要があることに留意する必要があります。

###例###

入力

− n = 10011110

出力

- 偶数ビットと奇数ビットを交換した後、 取得した 2 進数: 01101101

入力

− n = 10011110

出力

- 偶数ビットと奇数ビットを交換した後、 取得した 2 進数: 01101101

説明

理解を深めるために、前の例を考えてみましょう。

リーリー

結果として、偶数位置のビットが奇数位置にあることが必要であり、その逆も同様です。

奇数位置の偶数位置ビットの場合、

偶数位置を 1 位置右にシフトする必要があります。

したがって、偶数の位置にあるビットの場合は、E >> 1 を変更するだけで、目的の位置が得られます。

同様に、奇数ビットの目的の位置を取得するには、奇数位置ビットを 1 位置だけ左シフトする必要があります。

したがって、奇数のビットの場合は、O 次の問題は、奇数位置ビットと偶数位置ビットを抽出することです。

###みなさんご存じのとおり、### リーリー

したがって、n から E を抽出するには、

を実行するだけです。 リーリー

同様に、n から O を抽出するには、-

を実行する必要があります。 リーリー

ここで、スワップされた出力を見つけるには、

###ステップ###

必要な手順は次のとおりです-

E >> 1

O
  • ここで、or 演算を使用して E と O を結合します。
  • したがって、結果は次のようになります – Result = ( E >> 1 | O
  • Example
  • の中国語訳は次のとおりです:
  • Example

    このメソッドのコードは次のとおりです:
  • リーリー ###出力### リーリー 時間計算量 - このメソッドの時間計算量は O(1) です。

    スペースの複雑さ - 余分なスペースは使用していません。補助空間の複雑さは O(1) です。

    以上が2バイトごとに2ビットごとに交換するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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