바위타는 두루미

5.5 디버거 본문

Study/Interview준비

5.5 디버거

DoRoMii 2019. 8. 3. 18:23
728x90

문제

다음 코드가 하는 일을 설명하여라

 ( n & (n-1)) ==0 

 

접근법

이 문제는 거꾸로 접근해가면서 해결할 수 있다. 

1. 우선 , A & B==0이 무엇을 의미하는가?

 - A와 B에서 1비트의 위치가 같은 곳은 없다는 것을 의미한다. 

 

2. n-1은 어떻게 생겼을까?

1011000 - 1  =  1010111 이 된다. 

이말은 즉, 가장 오른쪽의 연속된 0들은 모두 1로 변하고 첫번째 1비트가 0으로 바뀐형태를 취한다. 

즉 n = abced1000 이면 n-1은 abcde0111 이고 

 

n & (n-1) ==0 가 되려면 abcde는 모두 0이 되어야 하므로 

n은 2의 거듭제곱 꼴이여야 저 코드가 참일 것이다.

 

따라서 n이 2의 거듭제곱꼴인지 확인하는 코드이다.  

 

'Study > Interview준비' 카테고리의 다른 글

5.7 쌍끼리 맞바꾸기  (0) 2019.08.03
5.6 변환  (0) 2019.08.03
5.4 다음숫자  (0) 2019.08.03
5.3 비트 뒤집기  (0) 2019.08.02
5.2 2진수를 문자열로  (0) 2019.08.02
Comments