【问题标题】:Convert Gray Code to Binary and vice versa将格雷码转换为二进制,反之亦然
【发布时间】:2021-06-17 21:45:45
【问题描述】:

我写了这个函数,但无法找出问题所在,请有人帮助我。它给出的输出为 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));

【问题讨论】:

  • let gray = ''; binary += gray[0]; 没有任何灰色可索引
  • 预期输出是什么?

标签: javascript arrays string binary gray-code


【解决方案1】:

几个问题:

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

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

  • 我想您打算将 01001 用作二进制文字,但它实际上是 10 进制数:一千零一。您必须在其前面加上 0b,例如 0b01001。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-15
      • 2013-04-16
      • 1970-01-01
      • 2016-10-06
      • 1970-01-01
      • 1970-01-01
      • 2016-09-03
      相关资源
      最近更新 更多