我正在尝试在C中进行位逻辑操作但是卡住了。我需要编写一个函数,给定一个输入参数,它将评估我的参数是否将所有偶数位设置为1.例如:
myFunction (0xFFFFFFFE) = 0;
myFunction (0x55555555) = 1;
我被允许使用的运营商是:!
~
&
^
|
+
<<
{ {1}}。我不能使用>>
语句,循环或相等性检查(因此没有if
或==
运算符。
答案 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)