2의 거듭제곱을 외우고 있다고 말하면 그걸 왜 외우냐는 질문이 가장 많이 들어온다.
어릴 적에 심심해서 외웠던 게 시작이었던 것 같다.
어릴 적에 10제곱까지 외웠다가 20제곱까지 늘렸던 기억이 난다.
대학교 와서 27제곱까지 외웠던 것 같다.
뇌 용량의 한계로 더 이상 외우려고 하지 않았는데,
최근에 알고리즘 공부하고 코드 짜다보니 그 유명한 2^31 - 1 = 2147483647을 자주 접하게 되었다.
그래서 내친김에 32제곱까지 외워버렸다.
2^1 = 2
2^2 = 4
2^3 = 8
2^4 = 16
2^5 = 32
2^6 = 64
2^7 = 128
2^8 = 256
2^9 = 512
2^10 = 1024
2^11 = 2048
2^12 = 4096
2^13 = 8192
2^14 = 16384
2^15 = 32768
2^16 = 65536
2^17 = 131072
2^18 = 262144
2^19 = 524288
2^20 = 1048576
2^21 = 2097152
2^22 = 4194304
2^23 = 8388608
2^24 = 16777216
2^25 = 33554432
2^26 = 67108864
2^27 = 134217728 (1억 3421만 7728)
2^28 = 268435456 (2억 6843만 5456)
2^29 = 536870912 (5억 3687만 912)
2^30 = 1073741824 (10억 7374만 1824)
2^31 = 2147483648 (21억 4748만 3648)
2^32 = 4294967296 (42억 9496만 7296)
p.s.
아래 내용은 이 글에 함께 적을 내용은 아니었긴 한데 생각난 김에 간단히 적는다.
(추후 새로운 글로 분리해야겠다)
참고로, C++에서 32비트 정수 int 자료형이 나타낼 수 있는 정수의 범위는 -2147483648 ~ 2147483647이다.
대략 -2억 ~ 2억 (-2e9 ~ 2e9)까지로 생각해도 무방하다.
64비트 정수 long long 자료형이 나타낼 수 있는 정수의 범위는 대략 -9*10^18 ~ 9*10^18 (-9e18 ~ 9e18)까지라고 생각하면 된다.
알고리즘 문제 풀 때 자주는 아니더라도 종종 활용하는 경우가 있었다.
부호가 없는 정수의 경우 0과 양수만을 저장할 수 있다.
음수에 할당된 범위를 모두 양수 쪽으로 돌렸으므로 양수를 나타낼 수 있는 범위는 2배가 된다.
따라서 부호가 없는 32비트 정수 unsigned int 자료형의 범위는 0 ~ 4억 (0 ~ 4e9) 정도이며,
부호가 없는 64비트 정수 unsigned long long 자료형의 범위는 0 ~ 18*10^18 (0 ~ 18e18) 정도가 된다.
'Algorithm > Math' 카테고리의 다른 글
[알고리즘] 유클리드 호제법 (0) | 2025.02.13 |
---|