js实现二进制加法
二进制加法实现原理
二进制加法遵循与十进制加法类似的规则,但进位条件是2而非10。每一位相加时可能出现四种情况:
- 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;
}
数值类型实现方法
对于较小的二进制数(不超过JavaScript安全整数范围),可以转换为十进制计算:
function addBinary(a, b) {
const numA = parseInt(a, 2);
const numB = parseInt(b, 2);
return (numA + numB).toString(2);
}
位运算优化方案
使用位运算可以避免显式的进位处理:
function addBinary(a, b) {
let x = parseInt(a, 2);
let y = parseInt(b, 2);
while (y != 0) {
let carry = x & y;
x = x ^ y;
y = carry << 1;
}
return x.toString(2);
}
处理前导零
某些情况下需要保持固定位数输出:
function addBinaryWithPadding(a, b, length) {
const sum = addBinary(a, b);
return sum.padStart(length, '0');
}
注意事项
- 输入验证应确保字符串只包含'0'和'1'
- 大数运算建议使用字符串方法
- 结果可能需要去除前导零(根据具体需求)
- 位运算方法有32位整数限制







