我收到错误“二进制 + 无效操作数(有 int* 和 int*)”,我不知道为什么它会抛出这个错误。我将如何添加两个数组的数组元素。请注意,两个数组的大小相同。
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;
}
最佳答案
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 **
类型或为 int 指针
数组。
或者像 @alk Sir 建议的那样简单,使用 int *
而不是 int **
。
关于c - C语言中的二进制数相加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32949142/