C 中的位操作?
Bit manipulation in C?
如果word中的所有偶数位都设置为1,我必须return1。对我来说麻烦的是我只能使用像+ , >> , <<, |, ^, ~ , !
这样的逻辑运算符。没有 if's
或 for
循环。我想我想用 0x55555555
掩盖它,但这就是我被卡住的地方。它假定这是 32bit
。
对于 32 位字:
#include <stdint.h>
int allBitEven(uint32_t x)
{
return ( !((x & 0x55555555)^0x55555555) );
}
因为我在回答这个问题,所以我提出了另一个函数,它可以仅通过逻辑运算来验证所有位是否为奇数或所有位是否为偶数:
int allBitEvenOrOdd(uint32_t x, int odd)
{
return ( !((x & (0x55555555<<odd))^(0x55555555<<odd)) );
}
如果奇数为1则验证所有位是否为奇数,如果奇数为0则验证所有位是否为偶数!
如果word中的所有偶数位都设置为1,我必须return1。对我来说麻烦的是我只能使用像+ , >> , <<, |, ^, ~ , !
这样的逻辑运算符。没有 if's
或 for
循环。我想我想用 0x55555555
掩盖它,但这就是我被卡住的地方。它假定这是 32bit
。
对于 32 位字:
#include <stdint.h>
int allBitEven(uint32_t x)
{
return ( !((x & 0x55555555)^0x55555555) );
}
因为我在回答这个问题,所以我提出了另一个函数,它可以仅通过逻辑运算来验证所有位是否为奇数或所有位是否为偶数:
int allBitEvenOrOdd(uint32_t x, int odd)
{
return ( !((x & (0x55555555<<odd))^(0x55555555<<odd)) );
}
如果奇数为1则验证所有位是否为奇数,如果奇数为0则验证所有位是否为偶数!