グレイ コードまたはリフレクト バイナリ コードは、2 つの連続する値が 1 ビットだけ異なる、特殊なタイプの数値のバイナリ表現です。たとえば、1 と 2 に相当するバイナリは 01 と 10 で、2 つのビットが変化します。しかし、グレイコードでは、1 は 01、2 は 11 であり、変化するのは 1 ビットだけです。この記事では、C で再帰を使用して、指定された 2 進数を同等のグレイ コードに変換する方法を説明します。
数値を 10 進整数として渡します
最初の例では、10 進数を指定します。数字は0と1だけですが、数字は10進数です。たとえば、入力として 6 を渡したい場合は、2 進数の 6 に相当する 110 (10 進数の 110) を渡します。プログラムは同様に出力を返します。
###アルゴリズム###
2進数を受け取る関数solve()を定義します
- n が 0 の場合、
- 0を返す終わってしまったら
- Last := n
の最後の桁
- second_last = n
の最後から 2 番目の桁
- 最後の桁と最後から2番目の桁が異なる場合は、
- 1 を入力してsolveを呼び出します(nは最後のビットを切り取ります)
0を入力してsolveを呼び出します(nは最後のビットを切り取ります)-
solve() 関数が終了-
###例###
リーリー
###出力###
リーリー
###結論は###
- 連続するビットに XOR 演算を適用することで、グレイ コードまたは反射バイナリ コードを見つけることができます。同じことは、指定された数値の最後の 2 桁を取得することによっても実現されます。それらが同じでない場合は、関数を再帰的に呼び出して、最後の桁を除いた数値を渡します。結果は 1 と連結され、それ以外の場合は 0 と連結されます。等々。この例では、入力を整数 10 進数として指定しており、出力も整数 10 進数形式です。同じ問題は、必要に応じてより大きな入力を提供するために使用できる文字列タイプの入力を取得することで解決できます。
以上が再帰を使用して 2 進数をグレイ コードに変換する C++ プログラムの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。