用于获得一点不工作的按位宏

时间:2014-07-15 17:38:50

标签: c macros

我有一个短变量(16位)和一个索引(unsigned char)。 我需要一个在我的变量index中返回data的宏。 这就是我得到的:

#define GETBIT(data, index) data & 1 << index

以及我如何使用它:

unsigned char i;
short * twobytes = (short *) calloc(1, sizeof(short));
twobytes =  ((char * )buffer + *currentIndex);
while (codeLength != 0)
{
    i = GETBIT(code, codeLength--);
    *twobytes = SETBIT(*twobytes, *currentBitIndex, i);
    (*currentBitIndex)++;
    if (*currentBitIndex == 8) {
        (*currentIndex)++;
        (*currentBitIndex) %= 8;
    }
}

由于某些原因,i在我的测试用例中总是等于0,有时候应该等于1

我做错了什么,应该如何解决?

感谢。

2 个答案:

答案 0 :(得分:0)

没关系,谢谢,而不是codeLength--我应该做--codeLength

答案 1 :(得分:0)

示例:

$ cat qq.c 
#include <stdio.h>

#define GETBIT(data, index) ((data & (1 << index)) == 0 ? 0 : 1)

int main() {
    const int x = 14;
    int i;
    for (i = 0; i < 32; i++) {
        printf("%d ", GETBIT(x, i));
    }
    printf("\n");
    return 0;
}

执行命令

$ gcc -Wall qq.c && ./a.out 
0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0