需要有人能解释我这段代码(十进制到二进制转换器)

时间:2017-03-28 17:32:22

标签: javascript

<script>
 function calculate() {
      var num = document.getElementById("decimal").value; //fetching binary value from html input box.
      var bin = [];
      while (num > 0) {
          bin[bin.length] = num % 2;
          num >>= 1; // basically /= 2 without remainder if any
      }
      document.getElementById("result").innerHTML = "Binary Value: " + bin.reverse().join('');
}
</script>

我试图理解这段代码,我无法理解这段代码中的这两行:

bin[bin.length] = num % 2;
num >>= 1;` 

3 个答案:

答案 0 :(得分:0)

  bin[bin.length] = num % 2;

根据num是偶数还是奇数,在bin附加0或1。

  num >>= 1;

正如评论所说,这将num除以2而没有余数。总的来说,循环将num的二进制表示的数字放入bin中,从最低有效到最高。这就是为什么它在最后被逆转的原因。

答案 1 :(得分:0)

bin [bin.length]只是将被打包的数字(实际上是字符串)的索引。对于每个bin.reverse(),它递增1。 num是数字形式的数字。 num&gt;&gt; = 1只向右移1位数。这有一个影响,将小数乘以2. bin [bin.length] = num%2只是结果为0或1,并将每次添加到字符串以形成最终答案。 我不确定你哪个部分不明白。有些操作员还是整个逻辑?

答案 2 :(得分:0)

您想知道bin[bin.length] = ...如何将值放在正确的位置。好吧,bin作为一个空数组(bin = [])开始,其长度为0.所以bin[bin.length] = bin[0]开始,第一件事就是在索引0处正确插入。

当事物插入到数组中时,内部维护此length属性。因此它将始终插入第一个可用插槽。

示例:在索引0处添加了某些内容后,length属性更新为1,下一次插入在bin[bin.length]完成,相当于bin[1]