컴퓨터는 0과 1밖에 모른다. 그런데 프로그래밍할 때는 16진수가 자주 나오고, IP 주소는 10진수고, 리눅스 파일 권한은 8진수로 설정한다. 결국 같은 숫자를 다른 방식으로 표현하는 것뿐인데, 수동 변환은 꽤 번거롭다.
진법이 뭔가
진법(진수)은 숫자를 세는 방식이다. 일상에서는 10진법을 쓴다. 0부터 9까지 10개의 숫자를 사용하고, 자릿수가 올라가면 10배씩 커진다. 2진법은 0과 1 두 개만 쓰고, 16진법은 0~9에 A~F를 추가해서 16개의 기호를 쓴다.
진법별 사용처
| 진법 | 사용하는 곳 | 예시 |
|---|---|---|
| 2진수 | 컴퓨터 내부 처리, 비트 연산 | 1010 = 10진수 10 |
| 8진수 | 리눅스 파일 권한 | chmod 755 |
| 10진수 | 일상 숫자, IP 주소 | 192.168.0.1 |
| 16진수 | 색상 코드, 메모리 주소 | #FF5733, 0x1A |
10진수를 2진수로 바꾸는 원리
10진수를 2로 계속 나누면서 나머지를 거꾸로 읽으면 2진수가 된다.
13 ÷ 2 = 6 ... 나머지 1
6 ÷ 2 = 3 ... 나머지 0
3 ÷ 2 = 1 ... 나머지 1
1 ÷ 2 = 0 ... 나머지 1
→ 거꾸로 읽으면: 1101
직접 해보면 간단한 숫자도 몇 단계가 필요하다. 큰 숫자나 16진수가 섞이면 실수 확률이 높아진다.
TIP 프로그래밍에서 16진수는 앞에 0x를 붙여 표기한다. 0xFF는 10진수 255이자 2진수 11111111이며, 8비트(1바이트)로 표현할 수 있는 최댓값이다.
진법 변환, 자동으로 하는 법
시험이 아니라면 손으로 나눗셈을 반복할 필요가 없다. 웹에서 바로 쓸 수 있는 진법 변환기가 있다. 한 칸에 숫자를 입력하면 나머지 세 칸에 2진, 8진, 16진 결과가 자동으로 채워진다. 2~36진법 사이의 사용자 정의 변환과 ASCII 문자 코드 변환까지 지원한다.
진법 변환은 원리를 한 번 이해하면 끝이고, 실무에서는 도구로 빠르게 처리하는 게 현실적이다.