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

标签 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);
}

最佳答案

您正在检查偶数的奇数位应该是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; }

最好给魔数(Magic Number)起个名字。

关于C - 使用按位运算符确定是否所有偶数位都设置为 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25877007/

相关文章:

c - 为什么我的 C 程序的二进制文件中没有 jmp esp 指令?

GCC 可以不提示 undefined reference 吗?

c - 在 Linux 中,如果我尽可能快地调用 send() 为什么会丢失 UDP 数据包?

c - 奇数位的位奇偶校验码

java - “Type mismatch: cannot convert int to byte”

c - 微型 C 编译器 : "error: unknown opcode ' jmp'"

c - 在 argv 上使用 fopen 时出现段错误

java - 如何在事先不知道最后一个 1 的情况下用 '1' 填充 Java 字节中的高端位? (FAST FIX 负整数解码器)

c++ - 如何使用 64 位而不是 32 位解决按位 seive?这两者有什么区别?

c - 确定字节中的哪一位被设置