我的任務是編寫一個宏,它檢查INT數組中有多少個元素激起5個位已打開。一個宏來計算位(設置)
我知道一個宏是一個非常冒險的做法,但這是一些考試中出現的問題。
這是我的代碼:
#include <stdio.h>
#define RESULT 5
#define SIZE 8
#define BITW(arr, length, counter)\
int mask=0b00000001, bits=0, i=0, j=0;\
for (i=0; i<length; i++){\
for (j=0; j<sizeof(arr[i])*SIZE; j++){\
if(mask&arr[i]>>j)\
bits++;\
}\
if (bits==RESULT)\
counter++;\
}
int main(void){
int arr[4]={0b11111000,0b11100011,0b11001100,0b11000000};
int res=0; int counter=0;
BITW(arr, 4, counter);
printf("%d",counter);
}
與宏的問題是,我不能調試我的代碼。我幾次沒有成功,但我意識到我得到的結果是1而不是2.
計數器變量是計算有多少元素有5位的計數器變量。位變量在某個元素中計數了多少位。
謝謝你的幫助。
賦值**是否要求**使用宏來計數位和/或測試數組中的元素? (這是一個非常糟糕的主意。) –
如果你在POSIX平臺上,你可以嘗試使用clang作爲編譯器。它能夠非常有效地將語句的起源追溯到宏定義。 –
@EricPostpischil是的,該任務需要兩者。我贊同你。 – Alan