您好我无法使此功能正常工作。基本上,如果所有偶数位均为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);
}
答案 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; }
最好给这个神奇数字命名。