티스토리 뷰
Question
Debuger 다음 코드가 하는 일을 설명하라
(( n & (n-1)) == 0)
제약사항
Solution
Solution
먼저 A & B의 연산 결과가 0 이란 뜻은 A와 B의 사이에 공통된 비트가 없다는 뜻이다.
그렇다면 A와 B의 의미에 대해 자세히 보면 n에서 1을 뺀다는 것은 n의 비트 값이 1인 것 중 최하위 비트에서 1을 뺀다는 의미이다. 그 수와 &연산을 하면 그 아랫 값들이 모두 0이 된다는 소리이다.
예를 들어, n 이 110101010111 이라고 하면
110101010100 : (n)
110101010011 : (n-1)
---------------------------
110101010000 : (n) & (n-1)
즉, 회색 표시 위의 값엔 영향을 안미치고, 이를 활용한다면, 값이 1인 비트가 단 한 개인 경우 해당 식을 만족한다는 뜻이다.
즉 위의 식을 다시 설명하면
n 의 비트 개수가 1개인가? 혹은
n 이 2의 거듭제곱인가?라고 판단하는 역할을 수행한다.
+) 추가로 이를 응용할 수 있다.
어떤 두 수 A, B가 있을 때, 서로 다른 비트가 1개 이하인지 알아볼 수 있다.
A & B를 연산한 결과를 C라 할 때, ((C) & (C -1)) == 0 이면 A와 B의 서로 다른 비트가 1개 이하이다.
역으로 생각해보면 A와 B의 결과로 값이 1인 비트가 하나 혹은 0이어야 해당식을 만족하고, 즉 &연산을 하였는데 겹치는 부분이 1개 이하라는 뜻으로, 서로 다른 비트가 1개 이하라고 판단할 수 있다.
'IT > Problem Solving' 카테고리의 다른 글
[C++] Interview Question : Bit flip (0) | 2022.07.16 |
---|---|
[C++] LeetCode : Jump Game (0) | 2022.07.15 |
[C++] Interview Question : Binary to String (0) | 2022.07.13 |
[C++] LeetCode : Permutations (0) | 2022.07.13 |
[C++] LeetCode : Generate Parentheses (0) | 2022.07.13 |
- Total
- Today
- Yesterday
- Interview
- 러스트
- algorithm
- C++
- PS
- 러스트 입문
- rust
- Medium
- 자료구조
- 솔직후기
- 기술면접
- 알고리즘
- 내돈내산
- 러스트 배우기
- 속초
- 반드시 알아야 할 자료구조
- 맛집
- Problem Solving
- interview question
- LeetCode
- DP
- 속초 맛집
- 인터뷰
- ProblemSolving
- 트리
- 러스트 기초
- 리트코드
- 코딩인터뷰
- coding interview
- Tree
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |