c++ - 这段代码中,a[i]&(1<<j)改怎么理解?
ringa_lee
ringa_lee 2017-04-17 15:21:37
0
4
762

将十进制的ip地址转化为二进制的ip地址

ringa_lee
ringa_lee

ringa_lee

全員に返信(4)
黄舟

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_11111 << 60b1000000、次に 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

いいねを押す +0
黄舟

は整数変数 a[i] の j 番目のビットの値を取得するために使用されます。 a[i]&(1j=0 の場合は最初のビットの値を取得し、j=1 の場合は 2 番目のビットの値を取得します。

いいねを押す +0
阿神

ループ内で、msb から lsb まで、各ビットをテストします。
(1<<j)ビットマスクを構築します。
a[i]&(1<<j)対応するビットが 1 に設定されているかどうかをテストします。

いいねを押す +0
洪涛

1 を j ビット左にシフトすると、その位置は 1 になります。& 演算は、1&1 のみが 1 であることを意味します。したがって、a[i]&(1

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート