簡體   English   中英

在 C 中添加二進制數

[英]Adding binary numbers in C

我收到錯誤“二進制 + 的操作數無效(有 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;
}
  remainder = first_complement2[count] + second_compelment[count] + carryover;

在這個first_complement2[count] second_compelment[count]都是整數指針。

因為first_complementsecond_complement都是整數指針數組。

您需要在添加之前取消引用它們 -

remainder = (*first_complement2[count]) + (*second_compelment[count]) + carryover;

編輯

int *傳遞給需要整數指針或int **數組的函數時,您沒有收到任何警告或錯誤嗎?

int* complement2Array1 = signed2complement2(signedIntArray1, j);    // it is an int *

complement2Array1complement2array2必須是int **類型或者是int pointers數組。

或者像@alk Sir 建議的那樣簡單,使用int *而不是int **

這個

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() second_compelment complement2_add()的方式second_compelment ,這是錯誤的。

看來你想要

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;
  ...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM