如何评估输入参数是否将所有偶数位设置为1?

时间:2013-02-01 06:50:57

标签: c logic bit-manipulation

我正在尝试在C中进行位逻辑操作但是卡住了。我需要编写一个函数,给定一个输入参数,它将评估我的参数是否将所有偶数位设置为1.例如:

myFunction (0xFFFFFFFE) = 0;
myFunction (0x55555555) = 1;

我被允许使用的运营商是:! ~ & ^ | + << { {1}}。我不能使用>>语句,循环或相等性检查(因此没有if==运算符。

3 个答案:

答案 0 :(得分:6)

您需要使用掩码测试值,并且在不使用==的情况下测试相等性有点狡猾,例如:

return !((n & 0x55555555) ^ 0x55555555);

注意:这假定为32位值。

答案 1 :(得分:4)

由于'=='是不允许的,因此必须使用其他技巧:

 (~number & 0x55555555) will be zero only when number&mask == mask.
 (~number & 0x55555555)==0 OTOH codes as 

 return !(~number & 0x55555555);

答案 2 :(得分:0)

这是你使用C编程解决它的方法,没有任何奇怪的人为限制:

// Get a platform-independent mask of all even bits in an int set to one:
#define MASK ( (unsigned int) 0x55555555u )

// MASK will be 0x5555u or 0x55555555u depending on sizeof(int).

然后是实际的算法:

if((x & MASK) == MASK)