格雷码到二进制转换

时间:2011-02-27 04:33:37

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

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

格雷码是一个二进制数字系统,其中两个连续值仅相差一位。

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

Binary是:

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

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

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

3 个答案:

答案 0 :(得分:2)

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

保留最高有效位,其余位保持连续位。

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

Bn = Gn,所有其他位Bn-1 = Gn-1 XOR Gn

答案 1 :(得分:0)

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

答案 2 :(得分:0)

<?php

function 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));

&GT;