【问题标题】:Gray code to binary conversion格雷码到二进制转换
【发布时间】:2011-07-05 03:02:15
【问题描述】:

给定一个数字的格雷码,找到该数字的二进制代码。

格雷码是一种二进制数字系统,其中两个连续的值只有一位不同。

例如两位格雷码是: 0 - 00 1 - 01 2 - 11 3 - 10

二进制是:

0 - 00 1 - 01 2 - 10 3 - 11

提供一种算法,将数字的格雷码转换为二进制码。

例如,输入为 11。预期输出为 10。

【问题讨论】:

  • 这是作业吗?应该很容易查找。
  • 家庭作业?到目前为止,您尝试过什么?
  • @sunmoon:如果你的答案给出了算法,你需要什么帮助?
  • 我正在寻找是否有其他方法可以解决这个问题。
  • @sunmoon,如果输入字符串足够短,总会有查找表。 :)

标签: c binary-data genetic-algorithm gray-code


【解决方案1】:
<?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));

?>

【讨论】:

    【解决方案2】:

    如果您想要一个简单的方法,可以使用一个很好的在线格雷码转换器:http://www.convertforfree.com/gray-code-converter/

    【讨论】:

      【解决方案3】:

      将格雷码转换为二进制是:

      保留最高有效位,其余位继续异或连续位。

      即 Gn Gn-1 Gn-2 ........ G1 为格雷码,Bn Bn-1 .......B1 为二进制码。

      Bn= Gn 并且对于所有其他位 Bn-1 = Gn-1 XOR Gn

      【讨论】:

      • 如果这是您自己问题的答案,请将其标记为答案 :)
      • 警告 - 这个答案有点不正确。 Bn-1 的正确公式是Bn-1 = Bn XOR Gn-1。请参阅here 了解更多信息。
      猜你喜欢
      • 2016-10-06
      • 1970-01-01
      • 2021-06-17
      • 1970-01-01
      • 2016-03-05
      • 1970-01-01
      • 2015-05-04
      • 1970-01-01
      • 2021-07-27
      相关资源
      最近更新 更多