ホームページ >バックエンド開発 >C++ >C++ で 1 ビットまたは 2 ビットを変更することで、指定された 2 つの数値を等しくできるかどうかを確認します

C++ で 1 ビットまたは 2 ビットを変更することで、指定された 2 つの数値を等しくできるかどうかを確認します

WBOY
WBOY転載
2023-08-25 17:57:101113ブラウズ

C++ で 1 ビットまたは 2 ビットを変更することで、指定された 2 つの数値を等しくできるかどうかを確認します

コンピューター プログラミングの分野では、多くの操作が数値を中心に展開されます。場合によっては、いくつかのビットを変更することで 2 つの数値を等しくできるかどうかを判断する必要がある場合があります。この問題は課題を引き起こす可能性がありますが、適切な戦略が成功した解決策につながります。

###文法###

アルゴリズムを深く理解するための強固な基盤を構築するために、まずこの特定の方法を使用して、後続のコーディングで使用される構文に慣れてみましょう。

リーリー

checkEquality 関数を使用してブール応答を生成し、指定された 2 つの整数 num1 と num2 が 1 ビットまたは 2 ビットのみを変更することで等しくできるかどうかを判断します。

###アルゴリズム###

ここではアルゴリズムを段階的に説明します:

num1 と num2 の XOR 結果を求め、その出力を新しい変数 xorResult に割り当てます。

  • アルゴリズムを使用して、xorResult のセット ビット数を計算し、結果を setBitCount という名前の変数に割り当てます。

  • 操作を成功させるためには、setBitCount が 2 を超えることはできません。この場合、関数は true の結果を返します。この指定されたしきい値を超えた場合、出力は false であると結論付けることができます。

  • アルゴリズムがわかったので、この問題を解決する少なくとも 2 つの異なる方法を見てみましょう。

  • 方法 1: ビット操作

  • このメソッドでは、ビット演算を使用して数値を等しくできるかどうかを確認します。
###例### リーリー ###出力### リーリー ###説明する###

1 つまたは 2 つのビットの値を変更することにより、C コードは簡単なチェックを実行して、処理中に指定された 2 つの値間の完全な位置合わせが確立できるかどうかを判断します。この目標を達成するために、コードの重要な部分は、「checkEquality」と呼ばれる特別な関数を定義することです。このカスタム関数を使用するには、2 つの整変数を入力として指定する必要があります。この特定の関数の出力タイプはブール論理を使用するため、ユーザーは実行時に関数に提供された引数が完全な数値調整に十分であるかどうかを示す結果を簡単に取得できます。

計算の目的で、このプログラムは XOR アルゴリズムを使用し、checkEquality メソッドを通じて上記の整数入力を比較します。その後、自動的に保存された結果が変数「xorResult」に取り込まれます。次のステップの重要な要素は、xorResult と XORResult - 1 の間のビットごとの AND 中間結果を計算することです。この段階で戻り値が「0」の場合、bitCheck変数の仮定が必要になります。これは必要な条件が満たされていることを示しているため、checkEquality 関数による要求を満たすには整数入力の 1 つまたは 2 ビットを変更する必要があると想定できます。完了すると、プログラムは最終計算段階としてパラメータを checkEquality メソッドに渡す前に、ユーザーに入力を求めます。プロセスが終了すると、必要なビットレベル変更の有無が出力メッセージに表示され、対応するメッセージがコンソール出力に表示されます。この実装は、C からのビット単位の操作と XOR エクスプロイトの優れた例を示しています。

方法 2: ハミング距離法

この方法では、ハミング距離の概念を使用して問題を解決します。

###例### リーリー ###出力### リーリー ###説明する###

この例では、2 つの異なる数値を等価にするために 1 ビットまたは場合によっては 2 ビットを変更できるかどうかを判断するように設計された C プログラムを提供します。さらに、Kemighan のアルゴリズムを利用して整数値に設定ビットが何個存在するかを決定する「countSetBits」と呼ばれる関数があります。

checkEquality 関数では、コードは 2 つの入力数値の排他的論理和を計算し、結果を xorResult に格納します。前のステートメントは countSetBits 関数をトリガーして、xorResult に設定されたビット数を決定し、その後 setBitCount に累積されます。 setBitCount が 2 以下であると判断された場合は、バランスを達成するために 1 ビットまたは 2 ビットのみを変更する必要があることを意味し、関数は true を返します。それ以外の場合は false を返します。

main 関数では、プログラムはユーザーに 2 つの数字を入力するよう求めます。次に、ユーザーが指定した数値を使用して checkEquality 関数を呼び出し、結果を保存します。最後に、プログラムは結果の値に応じて、1 ビットまたは 2 ビットを変更することで数値を等しくできるかどうかを示す適切なメッセージを出力します。

このコードは、XOR 演算とカーニハンのアルゴリズムを利用して設定ビットを効率的に計算する、問題の明確な実装を提供します。

###結論は###

私たちの記事では、1 ビットまたは 2 ビットだけを変更しながら、指定された 2 つの数値が等しいかどうかを判断する問題について詳しく説明します。この問題を解決するために、我々はビット演算法とハミング距離法という 2 つの有効な方法を提案します。どちらの方法でも効率的なソリューションが提供されます。これらのメソッドに基づいた実際の実行可能コードの例も提供します。これらの方法を理解して実装すると、いくつかのビットを変更することで 2 つの数値を等しくできるかどうかを効果的に確認できます。

以上がC++ で 1 ビットまたは 2 ビットを変更することで、指定された 2 つの数値を等しくできるかどうかを確認しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はtutorialspoint.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。