js实现二进制加法
二进制加法原理
二进制加法遵循与十进制类似的规则,但只有0和1两个数字。基本规则如下:
- 0 + 0 = 0
- 0 + 1 = 1
- 1 + 0 = 1
- 1 + 1 = 10(即结果为0,进位1)
实现方法一:逐位相加
将两个二进制字符串从最低位开始逐位相加,处理进位:
function addBinary(a, b) {
let result = '';
let carry = 0;
let i = a.length - 1;
let j = b.length - 1;
while (i >= 0 || j >= 0 || carry > 0) {
const digitA = i >= 0 ? parseInt(a[i--]) : 0;
const digitB = j >= 0 ? parseInt(b[j--]) : 0;
const sum = digitA + digitB + carry;
result = (sum % 2) + result;
carry = Math.floor(sum / 2);
}
return result;
}
实现方法二:转换为十进制计算
先将二进制转换为十进制,相加后再转回二进制:
function addBinary(a, b) {
const numA = parseInt(a, 2);
const numB = parseInt(b, 2);
const sum = numA + numB;
return sum.toString(2);
}
注意:此方法在数字较大时可能丢失精度,因为JavaScript的数值有范围限制。
实现方法三:使用BigInt处理大数
对于超长二进制字符串,可以使用BigInt避免精度问题:
function addBinary(a, b) {
const bigA = BigInt('0b' + a);
const bigB = BigInt('0b' + b);
return (bigA + bigB).toString(2);
}
边界情况处理
需要考虑空字符串、不等长字符串等情况:
function addBinary(a, b) {
if (!a) return b || '0';
if (!b) return a || '0';
// 其他实现代码...
}
性能优化
对于超长字符串,方法一(逐位相加)比方法二(十进制转换)更可靠,但方法三(BigInt)是现代JavaScript的最佳选择。







