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

C-使用逐位运算符确定是否所有偶数位都设置为1,c,bit-manipulation,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 & 0

嗨,我很难让这个功能正常工作。基本上,如果所有偶数位均为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);
}
#包括
int-allEvenBits(int);
int main(){
printf(“%d\n”,allEvenBits(0xFFFFFFFE));
返回0;
}
整数位(整数X){
返回!((X&0x5555)^0x5555);
}

您正在检查奇数位的偶数应为
0xaaaaaa

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; }

最好给这个幻数起个名字。

您正在检查奇数位的偶数应该是
0xaaaaaa

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; }

最好给这个神奇的数字起个名字。

试着用无符号整数代替整数。你有一个输入错误<代码>整数所有**事件**位(整数)尝试用无符号int代替int。您有一个输入错误<代码>整数所有**事件**位(整数)未签名的int 替换.>更新,是的,<代码>未签名的类型在使用位操作时更好,TXX。你认为最低有效位是什么:奇数还是偶数?根据我的POV,LSbit处于幂(2,0)位置,0为偶数。这里可能没有对/错,只是寻找你的POV。奇数-是
第一位
,根据问题中测试的数字和结果是
0
而不是预期的
1
,让我来思考一下。@NetVipeC有意义。从我的观点来看,操作代码是正确的。考虑到OP的问题,你的解释对他来说肯定是正确的+如果用<代码>未签名的int 取代.<更新>,是的,<代码>未签名的类型在使用位操作时更好,TXX可能更好地工作。THX,您认为最低有效位是什么:奇数还是偶数?根据我的POV,LSbit处于幂(2,0)位置,0为偶数。这里可能没有对/错,只是寻找你的POV。奇数-是
第一位
,根据问题中测试的数字和结果是
0
而不是预期的
1
,让我来思考一下。@NetVipeC有意义。从我的观点来看,操作代码是正确的。考虑到OP的问题,你的解释对他来说肯定是正确的+1.