我试图在一个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的值很少介于
0
和3
之间
然后你可以思考为什么会发生,并得出与Vlad的答案相同的结论。
此外,为了将来参考,大多数StackOverflow用户希望提问者执行他们的";尽职调查";,在向我们寻求解决方案之前,做出合理的努力来解决他们的问题。既然您了解了调试器,请在询问";为什么我的程序没有达到我的预期";。