黄舟2017-04-17 15:23:37
if (a[i]&(1<<j))
この文は、a[i]
の j
ビットが 1 であるかどうかを判断することを意味します。 1 << x
は、1 << 3 == 0b1000
のように 1 を x ビット左にシフトします。
a[i] = 111
が 32 ビットであると仮定すると、a[i]
のバイナリは 0b0000_0000_0000_0000_0000_0000_0110_1111
、1 << 6
は 0b1000000
、次に a[i] & 1 << 6 == 0b0000_0000_0000_0000_0000_0000_0100_0000
になります (a[i]
の 6 番目のビット (最初のビット) a[i] & 1 << 6
の 6 番目のビットが 0 の場合、a[i]
の結果は 0 になります。 a[i] & 1 << 6
黄舟2017-04-17 15:23:37
は整数変数 a[i] の j 番目のビットの値を取得するために使用されます。 a[i]&(1<
阿神2017-04-17 15:23:37
ループ内で、msb から lsb まで、各ビットをテストします。 (1<<j)
ビットマスクを構築します。 a[i]&(1<<j)
対応するビットが 1
に設定されているかどうかをテストします。
PHP中文网2017-04-17 15:23:37
1 を j ビット左にシフトすると、その位置は 1 になります。& 演算は、1&1 のみが 1 であることを意味します。したがって、a[i]&(1<