Java中用数组模拟二进制加法器需从低位开始逐位相加并处理进位:先补零对齐数组,分配n+1长度结果数组,遍历计算每位和与进位,最后去除前导零。
在 java 中用数组模拟二进制加法器,核心是把两个二进制数(字符串或整型数组)按位相加,手动处理进位逻辑。关键在于从低位(数组末尾)开始遍历,逐位计算和与进位,并将结果存入新数组。下面分步骤说明实现要点和常见写法。
用整型数组表示二进制数并统一长度
为方便对齐运算,先将输入的二进制字符串转为 int[],再补前导零使两数组等长:
- 例如 "101" → [1, 0, 1];"11" → [0, 1, 1](补一个高位零)
- 推荐使用
Math.max(a.length, b.length) + 1作为结果数组长度,预留最高位可能的进位空间 - 补零时从左端(索引 0)开始填充,确保高位在前、低位在后,便于后续从右往左计算
从右向左遍历,手动更新进位与当前位和
设 carry = 0,从索引 len - 1 往 0 遍历(即最低位到最高位):
- 当前位和 =
a[i] + b[i] + carry - 当前结果位 =
sum % 2(即 0 或 1) - 新进位 =
sum / 2(即 0 或 1) - 注意:即使某数组已“超出”,也应视为该位置为 0(靠预补零或边界判断保证)
处理最终进位并去除前导零
循环结束后,若 carry == 1,需填入结果数组最高位(即索引 0 处);之后应截掉多余前导零:
- 若结果数组长度为 n,且
result[0] == 0,可从第一个非零位开始截取子数组 - 若全为零(如 0+0),应至少保留一个 0
- 也可用
Arrays.toString()调试,但生产中建议转为字符串返回:String.join("", Arrays.stream(res).mapToObj(String::valueOf).toArray(String[]::new))
完整示例(无依赖、可直接运行)
以下是一个简洁可靠的实现片段:
public static int[] binaryAdd(int[] a, int[] b) {
int n = Math.max(a.length, b.length);
int[] res = new int[n + 1];
int carry = 0;
for (int i = 0; i <p>该写法避免了手动反转数组,通过逆向索引映射实现自然的低位对齐,逻辑清晰且不易越界。</p>
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











