1. ホーム
  2. c

[解決済み] bitParity - 整数中の奇数ビットを探す

2022-02-09 09:42:53

質問

関数を作成する必要があります。 bitParity(int x) 整数を受け取って 1 が奇数であれば 0 のビット形式では x であり、かつ 0 それ以外の場合は

bitParity(5) = 0, bitParity(7) = 1

しかし、この問題ではビット演算子しか使えないので難しいです( ! ˜ & ˆ | + << >> が唯一の合法的なものです)。つまり、ループがない。 if-then のようなものです。定数は使用可能です。

今のところ、私が持っているものは動作しませんが、私は、整数のビットをシフトするべきだと考えました。 16 , 8 および 4 回と XOR 残りの整数

どなたかアドバイスをお願いします。ありがとうございます。

どのように解決するのですか?

これはループで解決するのが正しい。しかし、ここでは、ループを使わずに解決する方法を紹介します。

x = (x & 0x0000FFFF) ^ (x >> 16)
x = (x & 0x000000FF) ^ (x >> 8)
x = (x & 0x0000000F) ^ (x >> 4)
x = (x & 0x00000003) ^ (x >> 2)
x = (x & 0x00000001) ^ (x >> 1)

編集:&は必要ないですね。より良いバージョンです。

x ^= x >> 16
x ^= x >> 8
x ^= x >> 4
x ^= x >> 2
x ^= x >> 1
x &= 1;