-1

코드를 살펴 보았을 때 나는 이것을 보았습니다.if 문의 비트 연산자

for(i=0; i<n; i++) 
{ 
    for(j=0; j<n; j++) 
    { 
    if(i & (1<<j)) 
     { 
     //code 
     } 
    } 
} 

이 루프는 어떻게 작동합니까? 나는 옳은 부분이 pow (2, j)가 될 것이라는 것을 알고 있지만, 나는 여기서 &이 어떻게 작동하는지 이해하지 못한다.

+0

이 코드는'n

+0

괜찮습니까? 나는 & 2^j가 어떻게 결과를 얻을 수 있는지 설명 할 수 있습니까? – user3719526

답변

1

그것은 0에서 n에 모든 값을 통해 루프, 이들 각각에 대해 :
이 값의 각 비트를 통해 반복합니다. 값이 설정되어있는 경우 :

if(i & (1<<j)) 

1<<jj 번째 비트 (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이 값을 너무 멀리 이동하려고하면 정의되지 않은 동작입니다. 그런 일이 일어나지 않도록하십시오.