用字符数组在 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的值很少在
0
和3
之间。
然后你可能会思考 为什么 会发生这种情况,并得出与 Vlad 的回答相同的结论。
此外,为了将来参考 - 大多数 Whosebug 用户希望提问者执行他们的“尽职调查”,在向我们寻求解决方案之前做出合理的努力来找出他们的问题。既然您了解了调试器 - 请在询问“为什么我的程序没有按照我的预期执行”之前使用调试器。
我正在尝试在 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的值很少在
0
和3
之间。
然后你可能会思考 为什么 会发生这种情况,并得出与 Vlad 的回答相同的结论。
此外,为了将来参考 - 大多数 Whosebug 用户希望提问者执行他们的“尽职调查”,在向我们寻求解决方案之前做出合理的努力来找出他们的问题。既然您了解了调试器 - 请在询问“为什么我的程序没有按照我的预期执行”之前使用调试器。