C中的二进制加法,来自数组

C中的二进制加法,来自数组,c,gcc,binary,c99,twos-complement,C,Gcc,Binary,C99,Twos Complement,我试图在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

我试图在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;
}
intaddbinary(inta[],intb[],intsum[]);
int main(){
int i=0;
int g=0;
整数和[5];
和[0]=0;
和[1]=0;
和[2]=0;
和[3]=0;
和[4]=0;
int b[5];
b[0]=0;
b[1]=0;
b[2]=0;
b[3]=0;
b[4]=1;
int集[5];
设置[0]=0;
设置[1]=0;
设置[2]=0;
集合[3]=1;
集合[4]=1;
addBinary(set,b,sum);
}
int addBinary(int a[],int b[],int sum[]{
int i,c=0;
对于(i=0;i<5;i++){
和[i]=((a[i]^b[i])^c);/c为进位
c=((a[i]&b[i])|(a[i]&c))|(b[i]&c);
}
和[i]=c;
int z=0;

对于(z=0;z您正在运行从MSB到LSB的加法,方向错误


将循环更改为从
i=4
开始,然后向下计数
i
,或者更改数组中位的顺序,使
a[0]
为LSB,并调整打印输出循环(这在我看来更有意义).

缩进是怎么回事?你真的是这样写的吗?为什么每0/1使用32/64位int?如果每次只想添加1,为什么要使用参数b?首先是什么问题?我在识别代码时遇到堆栈溢出问题。在测试加法时,这些数组只是占位符,是真实的数据源来自其他地方。原始帖子已更新