c中带有字符数组的二进制加法



我试图在一个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(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';

当num等于tp 3时,当co等于1,bn[i]和bn2[i]都等于"1"时,您没有处理这种情况。

而不是这个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上调试的两个堆栈溢出问题:

  • 如何调试C程序
  • 如何在Windows上调试C程序

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

  • 循环运行超过15次迭代,j不断增加
  • num的值很少介于03之间

然后你可以思考为什么会发生,并得出与Vlad的答案相同的结论。

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

相关内容

  • 没有找到相关文章

最新更新