如何修改10位二进制数加法代码实现含进位的11位运算结果
10位二进制字符串加法适配11位结果的修改方案
原有代码问题
原有代码仅实现了二进制位的异或运算,完全没有处理进位逻辑:两个二进制1相加时仅将当前位设为0,没有将进位1传递给高位计算,也没有预留最高位的进位存储位置,无法得到正确的11位结果。
修改思路
- 新增
carry变量记录每一步的进位值,初始为0 - 从两个10位字符串的最低位(最右侧字符)开始向左遍历计算
- 每一位的运算逻辑为:当前位两个数值相加 + 低位进位,按模2取当前位结果,除以2得到新的进位
- 10位全部计算完成后,剩余的进位直接作为第11位的最高位值
修改后代码(类C语法)
#define MAX 10 // str1、str2为长度10的二进制输入字符串 char str3[MAX + 2]; // 预留11位结果位 + 1位字符串结束符 int i = MAX - 1; // 从输入字符串的最低位下标(9)开始遍历 int carry = 0; while(i >= 0) { int bit1 = str1[i] - '0'; int bit2 = str2[i] - '0'; int sum = bit1 + bit2 + carry; str3[i + 1] = (sum % 2) + '0'; // 当前位结果存储在str3下标1~10位置 carry = sum / 2; // 更新进位 i--; } // 处理最终进位,作为第11位最高位 str3[0] = carry + '0'; str3[MAX + 1] = '\0'; // 补字符串结束符
效果验证
输入1010101010和1111111111运算后,str3输出结果为11010101001,符合预期。如果不需要无进位场景下的前置0,可以判断carry == 0时从str3[1]开始输出即可。
内容的提问来源于stack exchange,提问作者Anchr
相关产品推荐
相关产品推荐

