c - C 中的按位运算 - AnyOddBit

标签 c bit-manipulation

我的小家庭作业的最后一个问题遇到了麻烦。如果任何奇数位设置为 1,该函数应该返回 1。 这是我目前所拥有的:

int anyOddBit(int x) {
    return (x & 0xaaaaaaaa) != 0;
}

这很完美,但我不允许使用那么大的常量(只允许 0 到 255,0xFF)。我也不允许使用 !=

具体来说,这是我仅限于使用的:

  Each "Expr" is an expression using ONLY the following:
  1. Integer constants 0 through 255 (0xFF), inclusive. You are
      not allowed to use big constants such as 0xffffffff.
  2. Function arguments and local variables (no global variables).
  3. Unary integer operations ! ~
  4. Binary integer operations & ^ | + << >>

我不知道如何在这些限制范围内执行此操作,如果有人能指出正确的方向,我将不胜感激。提前致谢!

最佳答案

您可以在 AND 之前执行 OR:

((x>>0) | (x>>8) | (x>>16) | (x>>24)) & 0xaa

初始偏移 (x >> 0) 将被优化 - 它的存在是为了保持一致的外观。

关于c - C 中的按位运算 - AnyOddBit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10273606/

相关文章:

c - 如何从数字中清除半字节

c++ - 对具有指针的结构 vector 进行排序

c - 静态/内联关键字 : in front of prototype and/or implementation?

c - 访问/释放动态分配的结构数组时出现不需要的行为

javascript - ~[Array].indexOf(key) 是做什么的?

java - 为什么 AS3 右移位与 Java 中的右移位不同?

c - e 在这里取什么值?

将 BIGNUM 转换为原始二进制文件

C - 按位连接导致信息丢失

c - 在 C 中将两个 8 位寄存器读入 ADXL362 的 12 位值