Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 이분탐색
- 캘리그라피
- BOJ 2098
- 성화봉송
- 안드로이드 스튜디오
- 평창동계올림픽
- Segment Tree
- 삼성 코딩테스트
- 다이나믹 프로그래밍
- 외판원 순회
- multiset
- 위상정렬
- 다음 지도 api
- BFS
- 비트마스크
- 영어회화 100일의 기적
- 창훈쓰다
- 백트레킹
- upper_bound
- 인간이 그리는 무늬
- MST
- 그리디 알고리즘
- 생활코딩
- 성화봉송주자
- yolo
- DP
- 언어의 온도
- 다음 API
- boj
- lower_bound
Archives
- Today
- Total
Hoon222y
2의 거듭제곱인지를 O(1)에 알 수 있는 방법 본문
1 2 3 4 5 | if(n == n&-n) { printf("2의 거듭제곱!"); }else{ printf("2의 거듭제곱 아님!"); } | cs |
+설명)
2의 거듭제곱은 어떤 한 비트만 켜져있을 것이다.
n & -n 은 n에서 켜져있는 가장 아래의 비트만 켜진 수이다.
그렇기 때문에 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