C - 使用按位运算符确定是否所有偶数位都设置为1

时间:2014-09-16 19:34:53

标签: c bit-manipulation

您好我无法使此功能正常工作。基本上,如果所有偶数位均为1,则该函数应返回1,否则返回0。由于某种原因,该程序始终打印0。

以下是代码:

#include <stdio.h>

int allEvenBits(int);

int main() {
        printf("%d\n", allEvenBits(0xFFFFFFFE));
        return 0;
}

int allEvenBits(int X) {
        return !((X & 0x55555555) ^ 0x55555555);
}

1 个答案:

答案 0 :(得分:8)

你正在检查奇数位,因为偶数应该是0xAAAAAAAA

const unsigned int ODD_BITS_SET = 0x55555555;
const unsigned int EVEN_BITS_SET = 0xAAAAAAAA;
unsigned int allOddBits(unsigned int X) { return (X & ODD_BITS_SET) == ODD_BITS_SET; }
unsigned int allEvenBits(unsigned int X) { return (X & EVEN_BITS_SET) == EVEN_BITS_SET; }

最好给这个神奇数字命名。