1. ホーム
  2. c

[解決済み] C - すべての偶数ビットが1に設定されている場合、すべてを決定する。

2022-02-19 16:33:31

質問

偶数位ビット(左から数えて)がすべて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;
}