프로그래밍 시험에 '10진수 200을 2진수로 변환하시오'라는 문제가 나왔다. 2로 나누고 나머지를 거꾸로 읽으면 되는 건 아는데, 손으로 하면 중간에 실수가 생기기 쉽다. 정답은 11001000이다.
진법이란
진법은 숫자를 표현하는 체계다. 일상에서 쓰는 10진법은 0~9까지 10개 숫자를 쓰고, 2진법은 0과 1만 쓴다.
| 진법 | 사용 숫자 | 10진수 15의 표현 |
|---|---|---|
| 2진수 | 0, 1 | 1111 |
| 8진수 | 0~7 | 17 |
| 10진수 | 0~9 | 15 |
| 16진수 | 0~9, A~F | F |
같은 숫자 15인데 표현 방식이 전부 다르다. 컴퓨터 내부에서는 2진수로 데이터를 처리하고, 사람이 읽기 편하게 10진수나 16진수로 변환해서 보여주는 것이다.
수동 변환 방법
10진수 → 2진수
10진수를 2로 계속 나누고, 나머지를 아래에서 위로 읽는다.
200 ÷ 2 = 100 ... 0
100 ÷ 2 = 50 ... 0
50 ÷ 2 = 25 ... 0
25 ÷ 2 = 12 ... 1
12 ÷ 2 = 6 ... 0
6 ÷ 2 = 3 ... 0
3 ÷ 2 = 1 ... 1
1 ÷ 2 = 0 ... 1
→ 11001000
2진수 → 10진수
각 자릿수에 2의 거듭제곱을 곱해서 더한다.
1111(2) = 1x8 + 1x4 + 1x2 + 1x1 = 15
16진수 ↔ 2진수
16진수 한 자리는 2진수 4자리와 대응한다. 그래서 16진수가 긴 2진수를 짧게 줄여 쓸 때 유용하다.
예: 0xFF = 1111 1111(2) = 255(10)
실무에서 진법을 쓰는 경우
- 색상 코드 — CSS에서 #FF0000 같은 HEX 코드는 16진수다. FF는 10진수로 255.
- 네트워크 — IP 주소의 서브넷 마스크를 2진수로 변환해야 네트워크 범위를 계산할 수 있다.
- 파일 분석 — 바이너리 파일을 HEX 에디터로 열면 16진수로 표시된다.
- 권한 설정 — 리눅스 파일 권한 chmod 755는 8진수다. 2진수로 풀면 111 101 101.
시험에서 손으로 풀어야 하는 게 아니라면 굳이 매번 나누기를 반복할 필요는 없다. 진법 변환기에 숫자를 넣으면 2진수, 8진수, 10진수, 16진수가 동시에 표시되고, 2~36진법까지 사용자 정의 변환도 가능하다. ASCII 문자 코드 변환도 지원해서 개발 작업 중에 참고하기 좋다.