首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Javascript:添加两个二进制数字(返回二进制)

Javascript:添加两个二进制数字(返回二进制)
EN

Stack Overflow用户
提问于 2016-11-01 01:39:02
回答 16查看 32.5K关注 0票数 18

我有两个二进制输入,我也返回二进制的加法结果。

代码语言:javascript
运行
复制
var addBinary = function(a, b) {
    var dec = Number(parseInt(a, 2)) + Number(parseInt(b, 2));
    return dec.toString(2);
};

对于一些疯狂的大二进制,比如

A= 10100000100100110110010000010101111011011001101110111111111101000000101111001110001111100001101 B= 110101001011101110001111100110001010100001101011101010000011011011001011101111001100000011011110011

我在输出

110111101100010011000101110110100000011101000101011000000000000000000000000000000000000000000000000

假设的正确输出是

110111101100010011000101110110100000011101000101011001000011011000001100011110011010010011000000000

是因为溢出吗?如果是,那么Javascript中对二进制加法溢出的限制是什么?对不起1和0的那帮人。

EN

Stack Overflow用户

发布于 2018-09-17 16:56:46

以下是我对此的看法:

逻辑很简单,就像小学里教的一样,从最右边的数字开始:我把第一个数字的最后一个数字和第二个数字的最后一个数字相加,然后保持下一轮的进位。

在每一轮中(在while内),我正确地修剪两个数字,例如:

代码语言:javascript
运行
复制
// number
1101 -> 110
// The math is simple: 1101/10|0 (divide by 10 and convert to integer)

输入和输出是Strings,以克服JS最大整数限制,其中字符串的长度可以大得多。

完整代码:

代码语言:javascript
运行
复制
function binaryAddition(a,b){
  var result = "",
      carry = 0

  while(a || b || carry){
    let sum = +a.slice(-1) + +b.slice(-1) + carry // get last digit from each number and sum 

    if( sum > 1 ){  
      result = sum%2 + result
      carry = 1
    }
    else{
      result = sum + result
      carry = 0
    }
    
    // trim last digit (110 -> 11)
    a = a.slice(0, -1)
    b = b.slice(0, -1)
  }
  
  return result
}

// Tests
[
  ["0","0"],
  ["1","1"],
  ["1","0"],
  ["0","1"],
  ["10","1"],
  ["11","1"],
  ["10","10"],
  ["111","111"],
  ["1010","11"]
].forEach(numbers => 
   document.write(
     numbers[0] + " + " + 
     numbers[1] + " = " + 
     binaryAddition(numbers[0], numbers[1]) + 
     "      <mark> (" +
     parseInt(numbers[0], 2) + " + " + 
     parseInt(numbers[1], 2) + " = " + 
     parseInt(binaryAddition(numbers[0], numbers[1]),2) +
     ")</mark><br>" 
   )
)
document.body.style="font:16px monospace";

票数 9
EN
查看全部 16 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40353000

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档