検索

ホームページ  >  に質問  >  本文

c++ - 这段代码中,a[i]&(1<<j)改怎么理解?

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

ringa_leeringa_lee2767日前742

全員に返信(4)返信します

  • 黄舟

    黄舟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_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
  • 黄舟

    黄舟2017-04-17 15:23:37

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

    返事
    0
  • 阿神

    阿神2017-04-17 15:23:37

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

    返事
    0
  • PHP中文网

    PHP中文网2017-04-17 15:23:37

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

    返事
    0
  • キャンセル返事