0

C でビット論理操作を行おうとしていますが、行き詰っています。入力引数を指定すると、引数のすべての偶数ビットが 1 に設定されているかどうかを評価する関数を作成する必要があります。たとえば、次のようになります。

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

私が使用を許可されている演算子は次のとおり! ~ & ^ | + << >>です。ifステートメント、ループ、または等価性チェックを使用できません(つまり、==または!=演算子は使用できません)。

4

3 に答える 3

6

マスクを使用して値をテストする必要があり、 を使用せずに等しいかどうかをテストする方法について少し工夫する必要があります。次に==例を示します。

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

注意: これは 32 ビット値を想定しています。

于 2013-02-01T06:56:18.020 に答える
4

「==」は許可されていないため、他のトリックを使用する必要があります。

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

 return !(~number & 0x55555555);
于 2013-02-01T07:01:33.483 に答える
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)
于 2013-02-01T07:40:50.497 に答える