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의 거듭제곱꼴인지 확인하는 코드이다.