给定一个数字的格雷码,找到该数字的二进制代码。
格雷码是一种二进制数字系统,其中两个连续值仅在一位上有所不同。
例如两位格雷码是:0 - 00 1 - 01 2 - 11 3 - 10
二进制是:
0 - 00 1 - 01 2 - 10 3 - 11
提供一种将数字的格雷码转换为二进制码的算法。
例如,输入为 11。预期输出为 10。
给定一个数字的格雷码,找到该数字的二进制代码。
格雷码是一种二进制数字系统,其中两个连续值仅在一位上有所不同。
例如两位格雷码是:0 - 00 1 - 01 2 - 11 3 - 10
二进制是:
0 - 00 1 - 01 2 - 10 3 - 11
提供一种将数字的格雷码转换为二进制码的算法。
例如,输入为 11。预期输出为 10。
将格雷码转换为二进制是:
保留最高有效位,其余位保持异或连续位。
即 Gn Gn-1 Gn-2 ........ G1 是格雷码, Bn Bn-1 .......B1 是二进制码。
Bn= Gn 并且对于所有其他位 Bn-1 = Gn-1 XOR Gn
<?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));
?>
如果您想要一种简单的方法,可以使用一个很好的在线格雷码转换器:http: //www.convertforfree.com/gray-code-converter/