c语言如何实现两个数相加并将进位也当做高位的加数,最高位的进位当做最低位的加数
c语言如何实现两个数相加并将进位也当做高位的加数,最高位的进位当做最低位的加数
//下面的代码可以用数组进行二进制数的逐位相加。至于楼主的要求,只要在加法运算结束后检查最高位,然后采取相应处理就可以了。 //楼主先自己看看,不明白我再给你解释。代码写的可能有点啰嗦,楼主将就着看吧 #include <stdio.h> #include <string.h> void reverse(char * a) { int i = 0, j = strlen(a) - 1; char k; while (i < j) { k = a[i]; a[i++] = a[j]; a[j--] = k; } } void add_binary(char * r, char * a, char * b) { char i = 0, c = '0', la = strlen(a), lb = strlen(b); reverse(a); // 反转数组,方便进行加法运算 reverse(b); if (la < lb) { // 对齐两个数组的长度 memset(&a[la], '0', lb - la); } else { memset(&b[lb], '0', la - lb); } while (a[i]) { // 对两个二进制数逐位相加 if (a[i] == b[i]) { r[i] = c; c = a[i]; } else { r[i] = c == '1' ? '0' : '1'; } i++; } if (c == '1') { r[i] = '1'; } reverse(r); if (la < lb) { // 恢复在进行对齐时修改过的数组的长度 a[la] = 0; } else { b[lb] = 0; } } int main() { int i, j; char ia[32] = {0}, ja[32] = {0}, suma[33] = {0}; printf("Give me 2 integers: "); scanf("%d %d", &i, &j); itoa(i, ia, 2); itoa(j, ja, 2); add_binary(suma, ia, ja); printf("%s\n", suma); return 0; }