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

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

ringa_lee
ringa_lee

ringa_lee

모든 응답(4)
黄舟

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입니다.

黄舟

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

阿神

루프에서 msb부터 lsb까지 각 비트를 테스트합니다.
(1<<j)비트마스크를 빌드합니다.
a[i]&(1<<j)해당 비트가 1으로 설정되어 있는지 테스트합니다.

洪涛

1을 j비트만큼 왼쪽으로 이동하면 그 위치는 1이 됩니다. & 연산은 1&1만 1이라는 의미입니다. 따라서 a[i]&(1

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿