
알고리즘 문제를 풀다 보면 2ⁿ 형태의 값이 자주 등장한다.
C#에서는 흔히 다음과 같이 작성하기 쉽다.
int x = (int)Math.Pow(2, n);
하지만 이 경우, 더 적절한 표현은 다음이다.
int x = 1 << n;
정수 1을 이진수로 표현하면 다음과 같다.
1 = 0001
왼쪽 시프트 연산(<<)은 비트를 왼쪽으로 이동시키는 연산이다.
1 << 1 = 0010 (2)
1 << 2 = 0100 (4)
1 << 3 = 1000 (8)
즉, 비트를 한 칸 이동할 때마다 값은 2배가 된다.
1 << n == 2ⁿ
Math.Pow와 MathF.Pow는 각각 double, float 기반의 연산이다.
Math.Pow(2, n) // double
MathF.Pow(2, n) // float
정수 연산이 필요한 상황에서 불필요한 부동소수점 계산과 캐스팅이 발생한다.
| LeetCode 136. SingleNumber — XOR 연산 응용 (0) | 2025.12.11 |
|---|---|
| LeetCode 190. Reverse Bits — 두 가지 풀이 비교하기 (0) | 2025.12.11 |
| LeetCode 191 — Number of 1 Bits (이진수에서 1 개수 세기) (0) | 2025.12.11 |
| 퀵정렬 원리 아주 쉽게 이해하기(Quick Sort) (0) | 2024.11.08 |
| 백준 1316 - 그룹 단어 체커 (파이썬) (0) | 2021.01.16 |