确定是否所有偶数位(从左到右计数)都设置为 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/