찾다

 >  Q&A  >  본문

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

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

ringa_leeringa_lee2809일 전756

모든 응답(4)나는 대답할 것이다

  • 黄舟

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

    if (a[i]&(1<<j)) 이 문장은 a[i]j 비트가 1인지 확인하라는 의미입니다. 1 << x1 << 3 == 0b1000처럼 1을 x비트만큼 왼쪽으로 이동하는 것입니다.

    a[i] = 111이 32비트라고 가정하면 a[i]의 바이너리는 0b0000_0000_0000_0000_0000_0000_0110_1111이고, 1 << 60b1000000이고, a[i] & 1 << 6 == 0b0000_0000_0000_0000_0000_0000_0100_0000이면 a[i]의 6번째 비트(첫 번째 비트) 0번째 비트)가 1이면 a[i] & 1 << 6의 결과는 0이 아닙니다(위 예). a[i] 의 6번째 비트는 0이고 a[i] & 1 << 6의 결과는 0입니다.

    회신하다
    0
  • 黄舟

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

    은 정수변수 a[i]의 j번째 비트의 값을 구하는데 사용된다. a[i]&(1<j=0이면 첫 번째 비트의 값을 가져오고, j=1이면 두 번째 비트의 값을 가져오는 식입니다.

    회신하다
    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
  • 취소회신하다