Я написал макрос, который суммирует количество включенных нечетных индексированных битов.
Несколько примеров:
В переменной, которая содержит следующие биты:
10010101
Включен только бит с индексом 7, включен только 1 бит с нечетным индексом, поэтому ответ равен 1.
В переменной, которая содержит следующие биты:
00101011
Бит с индексом 1 включен, бит с индексом 3 включен и бит с индексом 5 включен, и, следовательно, всего 3 нечетных индексированных бита, которые включены, поэтому ответ равен 3.
Я написал основную функцию для проверки этого макроса.
Вот вся программа:
#include <stdio.h>
#define ODD(n)\
int count = 0;\
int i = 1; \
while(n>>i)\
{\
if( ((n>>i)%2) == 1)\
count++;\
i = i+2;\
}\
int main()
{
int i;
int j;
int array1[] = {1,2,3,4};
/*array1 contains (binary representation):
00000001
00000010
00000011
00000100
After passing these into the macro:
00000001 ----> 0 odd indexed bits are turned on
00000010 ---->1 odd indexed bit is turned on
00000011 ---->1 odd indexed bit is turned on
00000100 ----> 0 odd indexed bits is turned on
*/
int array2[4];
for(i=0; i<4; i++)
{
array2[i] = ODD(array1[i]);
}
for(j=0; j<4; j++)
{
printf("Array2: %d\n",array2[j]);
}
return 0;
}
Я понятия не имею, почему я получил следующие ошибки:
odd.c: In function ���main���:
odd.c:4:5: error: expected expression before ���int���
int count = 0;\
odd.c:34:19: note: in expansion of macro ���ODD���
array2[i] = ODD(array1[i]);
^
odd.c:8:13: error: ���count��� undeclared (first use in this function)
count++;\
^
count объявлен, поэтому я не знаю, в чем проблема.
Почему я получил эти ошибки и как я могу их исправить?