数値のグレイコードが与えられた場合、その数値のバイナリコードを見つけます。
グレイコードは、2つの連続する値が1ビットだけ異なる2進数システムです。
たとえば、2ビットのグレイコードは次のとおりです。0-00 1-01 2-11 3-10
バイナリは次のとおりです。
0-00 1-01 2-10 3-11
数値のグレイコードをバイナリコードに変換するアルゴリズムを提供します。
たとえば、入力は11です。期待される出力は10です。
数値のグレイコードが与えられた場合、その数値のバイナリコードを見つけます。
グレイコードは、2つの連続する値が1ビットだけ異なる2進数システムです。
たとえば、2ビットのグレイコードは次のとおりです。0-00 1-01 2-11 3-10
バイナリは次のとおりです。
0-00 1-01 2-10 3-11
数値のグレイコードをバイナリコードに変換するアルゴリズムを提供します。
たとえば、入力は11です。期待される出力は10です。
グレイコードをバイナリに変換するのは次のとおりです。
最上位ビットをそのまま保持し、残りのビットについては、後続のビットをxorし続けます。
つまり、Gn Gn-1 Gn-2 ........ G1はグレイコードであり、Bn Bn-1.......B1はバイナリコードです。
Bn = Gnであり、他のすべてのビットについてはBn-1 = Gn-1 XOR Gn
簡単な方法が必要な場合は、使用できる優れたオンライングレイコードコンバーターがあります:http://www.convertforfree.com/gray-code-converter/
<?php
関数gry_code($ n){
if($n == 0 || $n > 65 ) {
return "Invalid input please input between 1 to 65";
exit;
}
$arr = array();
array_push($arr,"0","1");
$i = 0;
$j = 0;
for ($i = 2; $i < (1<<$n); $i = $i<<1)
{
//duplicate the arr contents in reverse order
for ($j = $i-1 ; $j >= 0 ; $j--)
array_push($arr,$arr[$j]);
// append 0 to the first half
for ($j = 0 ; $j < $i ; $j++)
$arr[$j] = "0".$arr[$j];
// append 1 to the second half
for ($j = $i ; $j < 2*$i ; $j++)
$arr[$j] = "1".$arr[$j];
}
//return $arr;
$arr = array_slice($arr, -$n);
foreach($arr as $key => $arrx) {
echo $arrx."\n";
}
//return $arr;
}
print_r(gry_code(5));
?>