코드를 살펴 보았을 때 나는 이것을 보았습니다.if 문의 비트 연산자
for(i=0; i<n; i++)
{
for(j=0; j<n; j++)
{
if(i & (1<<j))
{
//code
}
}
}
이 루프는 어떻게 작동합니까? 나는 옳은 부분이 pow (2, j)가 될 것이라는 것을 알고 있지만, 나는 여기서 &이 어떻게 작동하는지 이해하지 못한다.
코드를 살펴 보았을 때 나는 이것을 보았습니다.if 문의 비트 연산자
for(i=0; i<n; i++)
{
for(j=0; j<n; j++)
{
if(i & (1<<j))
{
//code
}
}
}
이 루프는 어떻게 작동합니까? 나는 옳은 부분이 pow (2, j)가 될 것이라는 것을 알고 있지만, 나는 여기서 &이 어떻게 작동하는지 이해하지 못한다.
그것은 0
에서 n
에 모든 값을 통해 루프, 이들 각각에 대해 :
이 값의 각 비트를 통해 반복합니다. 값이 설정되어있는 경우 :
if(i & (1<<j))
1<<j
가 j
번째 비트 (0에서 시작하는)을 설정하는 일반적인 방법이다
는 는 //code
는 복잡한 부품을 검사하자 행한다. j==0
이면 0b00001
이고, j==3
이면 0b01000
입니다. 그런 다음 i & <bit>
은 i
에 비트가 설정된 경우 <bit
으로 평가되고, 그렇지 않으면 0
으로 평가됩니다. 따라서 j
번째 비트가 i
에 설정되어 있는지 확인합니다.
코드를 트리거 값 쌍은 다음이다 :
i binary js
0 000
1 001 0
2 010 1
3 011 0, 1
4 100 2
5 101 0, 2
6 110 1, 2
etc...
31 11111 0, 1, 2, 3, 4,
공지 방법 진 거울에 1S 코드 트리거하는 제 j의 값.
n>=32
이 값을 너무 멀리 이동하려고하면 정의되지 않은 동작입니다. 그런 일이 일어나지 않도록하십시오.
이 코드는'n
괜찮습니까? 나는 & 2^j가 어떻게 결과를 얻을 수 있는지 설명 할 수 있습니까? – user3719526