用字符数组在 c 中进行二进制加法

Binary addition in c with character arrays

我正在尝试在 c 函数中添加两个二进制数,但无法得到我想要的结果。

#include <string.h>
#include <stdio.h>

char * sadd(char bn1[], char bn2[], char s[]){ //Function to add the binary numbers

        int i;
        int co = 0;
        int num = 0;

        for(i = 15; i>0; i++){
                num = (int)bn1[i] + (int)bn2[i] + co;
                co = 0;
                if(num == 2){
                        co = 1;
                        s[i] = '0';
                }
                else{
                        s[i] = (char)num;
                }
        }
        return s;
}

这个for循环

for(i = 15; i>0; i++){

不正确。它没有减少变量 i,而是增加了。看来你的意思是

for(i = 15; i>=0; i--){

此声明

num = (int)bn1[i] + (int)bn2[i] + co;

应该改写成

num = bn1[i] - '0' + bn2[i] - '0' + co;

还有这个声明

s[i] = (char)num;

应该改写成

s[i] = num + '0';

并且当 co 等于 1 且 bn[i] 和 bn2[i] 都等于'1'时,您没有处理 num 等于 tp 3 的情况。

而不是这个 if 语句

co = 0;
if(num == 2){
        co = 1;
        s[i] = '0';
}
else{
        s[i] = (char)num;
}

你可以写

s[i] = num % 2 + '0';
cp = num / 2;

@VladFromMoscow 提供了耐心而有效的答案。但是 - 如果您要使用调试器单步执行程序的 运行,您本可以自己解决这个问题。

这里有两个关于在 Linux 和 Windows 上调试的 Whosebug 问题:

  • How to debug a C program
  • How do you debug a C program on Windows?

如果您要调试程序,单步执行各个命令,您会注意到:

  • 循环 运行s 超过 15 次迭代,j 递增。
  • num的值很少在03之间。

然后你可能会思考 为什么 会发生这种情况,并得出与 Vlad 的回答相同的结论。

此外,为了将来参考 - 大多数 Whosebug 用户希望提问者执行他们的“尽职调查”,在向我们寻求解决方案之前做出合理的努力来找出他们的问题。既然您了解了调试器 - 请在询问“为什么我的程序没有按照我的预期执行”之前使用调试器。