【发布时间】:2014-12-14 12:15:21
【问题描述】:
我正在尝试在 C 中将两个 5 位二进制数相加。 这是一个二进制补码转换,我只需要在我的原始数字上加一个。 我看到网上有很多可用的代码,但我无法让它在我的实现中运行。我从这个执行中得到 '00010',它应该是 '00100'
这里是
int addBinary(int a[], int b[], int sum[]);
int main(){
int i=0;
int g =0;
int sum[5];
sum[0] =0;
sum[1] =0;
sum[2] =0;
sum[3] =0;
sum[4] =0;
int b[5];
b[0] =0;
b[1] =0;
b[2] =0;
b[3] =0;
b[4] =1;
int set[5];
set[0] =0;
set[1] =0;
set[2] =0;
set[3] =1;
set[4] =1;
addBinary(set,b,sum);
}
int addBinary(int a[], int b[], int sum[]){
int i, c = 0;
for(i = 0; i < 5 ; i++){
sum[i] = ((a[i] ^ b[i]) ^ c); // c is carry
c = ((a[i] & b[i]) | (a[i] & c)) | (b[i] & c);
}
sum[i] = c;
int z=0;
for(z=0; z<5; z++) {
printf("%d",sum[z]);
}
return c;
}
【问题讨论】:
-
那个缩进是怎么回事?你真的是这样写的吗?
-
为什么每个 0/1 都使用 32/64 位 int?如果你只想每次加1,为什么要一个参数b?
-
首先是什么问题?
-
我在识别我的代码时遇到堆栈溢出问题。
-
这些数组只是占位符,而我测试添加,真正的数据源来自其他地方。原帖已更新
标签: c gcc binary c99 twos-complement