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


<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;` 
  bin[bin.length] = num % 2;

将 0 或 1 附加到bin,具体取决于 num 是偶数还是奇数。

  num >>= 1;

正如评论所说,这会将 num 除以 2 而没有余数。 总体而言,该循环将 num 的二进制表示数字从最不重要到最重要放入 bin 中。 这就是为什么它在最后被颠倒的原因。

bin[bin.length] 只是将被分类的数字(实际上是字符串(的索引。对于每个 bin.reverse((,它递增 1。数字是数字形式的数字。 num>>= 1 只是向右移动 1 位数字。这会影响将小数点占卜 2。bin[bin.length] = num % 2 只是结果为 0 或 1,每次都添加到字符串中以形成最终答案。我不确定你不明白哪一部分。某个运算符还是整个逻辑?

你想知道bin[bin.length] = ...如何将值放在正确的位置。好吧,bin 从一个长度为 0 的空数组 (bin = []( 开始。因此,bin[bin.length] = bin[0]开始,第一件事在索引 0 处适当插入。

length 属性在将内容插入数组时在内部维护。因此,它将始终插入第一个可用插槽。

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

最新更新