C - 确定所有偶数位是否都设置为 1

标签 c bit-manipulation puzzle

确定是否所有偶数位(从左到右计数)都设置为 1。例如,0101 0101 会计数,而 1011 1000 不会计数。

如果该位所有偶数位均为 1,则返回 1,否则返回 0。

约束:只能使用按位运算符。不能使用条件语句。表达式中可以使用的最大整数是 0xFF

这是我的代码:

int allEvenBits(int X) {
    int x1 = !((X & 0x55) ^ 0x55);
    int x2 = !(((X >> 8) & 0x55) ^ 0x55);
    int x3 = !(((X >> 16) & 0x55) ^ 0x55);
    int x4 = !(((X >> 24) & 0x55) ^ 0x55);
    return x1 + x2 + x3 + x4;

}

对于以下内容,上面返回 1:1011 0010 1001 0010 1011 1001 1111 1111

如何修改它以使其适用于约束?

最佳答案

假设>>算作按位运算符,则以下仅需要最多16的常量。

int allEven(unsigned x) {
  x &= x >> 16;
  x &= x >> 8;
  x &= x >> 4;
  x &= x >> 2;
  return x&1;
}

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

相关文章:

c++ - 如何设置、清除和切换单个位?

java - Spotify 拼图 : avoiding exception handling error

algorithm - 其他游戏“Quarth”的算法

c - 使用逗号读取文本文件

c - 将 char 和 float 值传递给字符串

c++ - 通过使用 size_t 的否定翻转最低有效一位

algorithm - 如何选择图中最接近所有其他节点的节点?

c - 如何在C编程中使用链表将堆栈链接到其他堆栈?

c - 如何在C中显示数组最大值的索引?

c++ - 使用 uint16_t 和按位操作时期望的数字是多少