将格雷码转换为二进制,反之亦然

Convert Gray Code to Binary and vice versa

我写了这个函数,但找不到问题所在,有人可以帮助我吗?它给出的输出为 513。我已经添加了二进制和灰色的函数,请帮助我!谢谢:)

function xor_c (a,b){
    return (a==b)?'0':'1';
}

function flip(c){
    return (c=='0') ? '1':'0';
}

function BinaryToGray(binary){
let gray='';
gray+=binary[0];
for(let i=1;i<binary.length;i++){
    gray+=xor_c(binary[i-1],binary[i]);
}
return binary;
}

function GrayToBinary(gray){
let binary='';
binary+=gray[0];
for(let i=1;i<gray.length;i++){
    if(gray[i]=='0')
        binary+=binary[i-1];
    else
        binary+=flip(binary[i-1]);
}
return binary;
}

let binary=(01001).toString();
console.log(BinaryToGray(01001));

function xor_c (a,b){
    return (a==b)?'0':'1';
}

function flip(c){
    return (c=='0') ? '1':'0';
}

function BinaryToGray(binary){
binary = binary.split('');
let gray='';
gray += binary[0];
for(let i=1;i<binary.length;i++){
    gray+=xor_c(binary[i-1],binary[i]);
}
return gray;
}

function GrayToBinary(gray){
let binary='';
binary+=gray[0];
for(let i=1;i<gray.length;i++){
    if(gray[i]=='0')
        binary+=binary[i-1];
    else
        binary+=flip(binary[i-1]);
}
return binary;
}

let binary='0101001';
console.log(BinaryToGray(binary));

几个问题:

  • 您的 BinaryToGray 有一个错误的 return:它只是 return 给出的参数。它应该 return 结果,即 return gray;

  • 主代码将一个数字传递给该函数,而该函数需要一个二进制表示法的字符串。主代码有生成字符串的痕迹(给变量binary),但是toString默认会生成十进制的字符串。您应该将参数传递给 toString 以获得二进制表示:toString(2).

  • 我想您希望 01001 成为二进制文字,但它实际上是以 10 为基数的 1:一千零一。您必须在其前面加上 0b,例如 0b01001.