在C中添加二进制数

时间:2015-10-05 12:52:18

标签: c arrays pointers binary

我得到错误“无效的操作数到二进制+(有int *和int *)”,我不知道为什么它给我这个错误。我将如何添加2个数组的数组元素。请注意两个数组的大小相同。

int* complement2_add(int* first_complement2[], int* second_compelment[], int size){
int count = 0,remainder = 0, carryover = 0;

int* cAdd = (int*)malloc(size*sizeof(int));


for(count = size-1; count >= 0; count--){
    remainder = first_complement2[count] + second_compelment[count] + carryover;

    if(remainder == 1){
        cAdd[count] = 1;
        carryover = 0;
    }
    else if(remainder == 2){
        cAdd[count] = 0;
        carryover = 1;
    }
    else if(remainder == 3){
        cAdd[count] = 1;
        carryover = 1;
    }
    else if(remainder == 0){
        cAdd[count] =0;
        carryover = 0;
    }

}
if(carryover == 1){
    cAdd[count] = 1;
}
return cAdd;

}

然后我就像这样在main中调用函数。

    int* add1 = complement_2_add(complement2Array1, complement2Array2, j);

Complement2Array1和Complement2Array2的定义相同。

int* complement2Array1 = signed2complement2(signedIntArray1, j);

和signed2complement2定义为。

int* signed2complement2(int signed_binary[], int size){
  int i = 0;
  int* complemt2Array = (int*)malloc(size*sizeof(int));
  int flipflag = 0;
  for(i = size-1; i>=0;i-- ){
    if(flipflag == 0){
        complemt2Array[i] = signed_binary[i];
        if(signed_binary[i] == 1){
            flipflag = 1;
        }
    }
    else{
        complemt2Array[i] = signed_binary[i] == 0?1:0;
    }
  }
  return complemt2Array;
}

2 个答案:

答案 0 :(得分:1)

List

在此 remainder = first_complement2[count] + second_compelment[count] + carryover; 中, first_complement2[count]都是整数指针。

由于second_compelment[count]first_complement都是整数指针数组。

在添加 -

之前,您需要取消引用它们
second_complement

修改

对于将remainder = (*first_complement2[count]) + (*second_compelment[count]) + carryover; 传递给需要整数指针数组或int *的函数,您是否收到任何警告或错误?

int **

int* complement2Array1 = signed2complement2(signedIntArray1, j); // it is an int * complement2Array1必须是complement2array2类型,或者是int **的数组。

或者简单,因为@alk Sir建议使用int pointers代替int *

答案 1 :(得分:0)

这个

int* complement2_add(int* first_complement2[], int* second_compelment[], int size){

如果等于

int* complement2_add(int ** first_complement2, int ** second_compelment, int size){

您使用first_complement2second_compelment的方式以及您拨打complement2_add()的方式是错误的。

好像你想要

int* complement2_add(int * first_complement2, int * second_compelment, int size){

在使用原型之前,还要将原型添加到其中:

int* complement2_add(int * first_complement2, int * second_compelment, int size);

... somefunc(...)
{
  ...

   int* add1 = complement_2_add(complement2Array1, complement2Array2, j);

   ...
}

int* complement2_add(int* first_complement2, int* second_compelment, int size)
{
  int count = 0,remainder = 0, carryover = 0;
  ...