Hoon222y

2의 거듭제곱인지를 O(1)에 알 수 있는 방법 본문

코딩/사소한 팁

2의 거듭제곱인지를 O(1)에 알 수 있는 방법

hoon222y 2017. 5. 25. 14:35
1
2
3
4
5
if(n == n&-n) {
    printf("2의 거듭제곱!");
}else{
    printf("2의 거듭제곱 아님!");
}
cs


+설명) 

2의 거듭제곱은 어떤 한 비트만 켜져있을 것이다.

n & -nn에서 켜져있는 가장 아래의 비트만 켜진 수이다.

그렇기 때문에 2개 이상이 켜져있다면 n & -n와는 절대 같아질 수 없는 것이다.

그리고 n에 비트가 하나만 켜져있다면 n & -n 은 그 비트만 켜진 수가 되므로 같게되는것이다.


출처) http://sgc109.tistory.com/130

잘보고 배웠당 ㅎㅎ

'코딩 > 사소한 팁' 카테고리의 다른 글

tuple값 가져오기  (0) 2017.06.03
XOR 연산과 비트연산 주의점  (0) 2017.05.30
Next-permutation을 이용한 다음 수열 구하기  (0) 2017.03.07
입력이 끝날때까지 입력  (0) 2017.02.26
에라토스테네스의 체  (0) 2017.02.22
Comments