【问题标题】:evaluating javascript base10 to base2 conversion function评估 javascript base 10 到 base 2 的转换函数
【发布时间】:2017-12-11 04:31:26
【问题描述】:

我编写了一个简单的函数来将一个以 10 为底的数字转换为二进制数。我编写的函数是我使用我所知道的简单工具的最佳尝试。我已经在这个网站上查找了如何做到这一点的其他方法,但我还不太了解。我确信我编写的函数很奇怪,但它似乎可以解决问题。

这是一个 jsfiddle 展示它的实际操作: https://jsfiddle.net/unpkt48e/

这里是功能代码:

var toBinary = function(x) {

  x = parseInt(x);

  if (x < 0) {
    var k = '-' 
    x = Math.sqrt(Math.pow(x, 2));    
  }

  if (x == 0) {
    return 0;
  }

  var y = x;
  var g = [];

  while (Math.log2(y) >= 0) {
    var n = parseInt(Math.log2(y)); 
    g.push(n+1);
    y = y - Math.pow(2, n);
  }

  var binArray = [];
  for (var i = 0; i < g[0]; i++) {
    binArray.push(0);
  }
  for (var i = 0; i < g.length; i++) {
    binArray[binArray.length-g[i]] = 1;
  }

  var binary = binArray.join("");
  return (k || "") + binary;

};

我还没有很多工具来评估这个,所以我的问题如下:

这个函数返回的看起来是对的,但是我怎样才能确保我得到的实际上是一个二进制数,而不仅仅是一个看起来像二进制数的字符串。我错过了几个关键部分吗?还是我的方法是死路一条?

另一个问题:JS 中是否有内置函数可以为我执行此操作?大多数情况下,这对我来说是一个学习练习,所以我仍然对生成 base10 到 base2 的数字转换函数感兴趣。

【问题讨论】:

    标签: javascript testing binary numbers


    【解决方案1】:

    您可以使用toString()numObj.toString(base) 传递基值作为参数,添加Demo

    var input = document.getElementById("decimal");
    input.addEventListener("input", getBinary);
    
    function getBinary() {
      var decimal = document.getElementById("decimal").value;
      var binary = Number(decimal).toString(2);
      document.getElementById("binary").innerHTML = binary;
    };
    body {
      margin-left: 20px;
      font-family: monospace;
      font-size: 18px;
    }
    p { display: inline-block; }
    <body>
    <p>Enter a number here:</p>
    <input id="decimal"><br><br>
    
    <p>This is that number but in binary:</p><br>
    <p id="binary" style="border: 1px solid black; height: 20px;min-width :100px"></p>
    </body>

    【讨论】:

    • 我可以通过什么方式将我的函数的输出与您描述的方法进行比较?有什么方法可以区分,例如字符串 101(一零一)与数字 101(一百零一)和二进制数 101(base10 中的 5)?
    • @Jozurcrunch 通过知道它是在哪个基础上编写的。不,否则101 无法与101 区分开来。但是,如果您想使用使用的基数来注释数字表示,通常将其用作后缀:101₁₀ = 1100101₂, 101₂ = 5₁₀
    • 我已经尝试在一些输出上使用一些位运算符,并且有些工作。但是,如果我尝试 g = toBinary(5) = 101 和 h = toBinary(7) = 111,然后执行 XOR (g ^ h) 结果是 '10',而我知道它应该是 '010'。这说明我的代码有问题吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-12
    • 1970-01-01
    • 2011-01-24
    • 2013-03-05
    相关资源
    最近更新 更多