将十进制的ip地址转化为二进制的ip地址
ringa_lee
if (a[i]&(1<<j)) この文は、a[i] の j ビットが 1 であるかどうかを判断することを意味します。 1 << x は、1 << 3 == 0b1000 のように 1 を x ビット左にシフトします。
if (a[i]&(1<<j))
a[i]
j
1 << x
1 << 3 == 0b1000
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
a[i] = 111
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] & 1 << 6
は整数変数 a[i] の j 番目のビットの値を取得するために使用されます。 a[i]&(1j=0 の場合は最初のビットの値を取得し、j=1 の場合は 2 番目のビットの値を取得します。
ループ内で、msb から lsb まで、各ビットをテストします。 (1<<j)ビットマスクを構築します。 a[i]&(1<<j)対応するビットが 1 に設定されているかどうかをテストします。
(1<<j)
a[i]&(1<<j)
1
1 を j ビット左にシフトすると、その位置は 1 になります。& 演算は、1&1 のみが 1 であることを意味します。したがって、a[i]&(1
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
は整数変数 a[i] の j 番目のビットの値を取得するために使用されます。 a[i]&(1j=0 の場合は最初のビットの値を取得し、j=1 の場合は 2 番目のビットの値を取得します。
ループ内で、msb から lsb まで、各ビットをテストします。
(1<<j)
ビットマスクを構築します。a[i]&(1<<j)
対応するビットが1
に設定されているかどうかをテストします。1 を j ビット左にシフトすると、その位置は 1 になります。& 演算は、1&1 のみが 1 であることを意味します。したがって、a[i]&(1