프로그래밍 수업에서 10진수 255를 2진수로 바꾸라는 문제가 나왔다. 2로 나누고 나머지를 적고, 다시 나누고를 반복하다 보면 어디서 실수했는지도 모르게 답이 틀린다. 16진수는 더 복잡하다. 진법 변환의 원리를 한 번 정리해두면 반복 계산에서 실수가 줄어든다.
진법이 왜 여러 개인가
사람은 10진수가 편하지만, 컴퓨터는 전기 신호의 켜짐/꺼짐 두 가지만 구분하니까 2진수를 쓴다. 16진수는 2진수를 짧게 표현하기 위해 만들어졌다. 2진수 8자리(11111111)를 16진수 2자리(FF)로 줄일 수 있어서, 메모리 주소나 색상 코드 같은 긴 값을 다룰 때 쓴다.
10진수를 2진수로 바꾸는 법
10진수를 2로 계속 나누면서 나머지를 아래에서 위로 읽으면 된다.
예시: 10진수 13
- 13 ÷ 2 = 6 나머지 1
- 6 ÷ 2 = 3 나머지 0
- 3 ÷ 2 = 1 나머지 1
- 1 ÷ 2 = 0 나머지 1
아래에서 위로 읽으면 1101. 10진수 13은 2진수로 1101이다.
16진수 변환은 4비트 묶음이 핵심
16진수는 0~9까지는 그대로 쓰고, 10~15를 A~F로 표기한다. 2진수를 16진수로 바꿀 때는 뒤에서부터 4자리씩 끊어서 변환하면 된다.
예시: 2진수 11111111
- 뒤 4자리: 1111 → 15 → F
- 앞 4자리: 1111 → 15 → F
결과: FF. 10진수 255 = 2진수 11111111 = 16진수 FF다.
개발에서 자주 쓰는 진법 변환표
| 10진수 | 2진수 | 16진수 | 용도 |
|---|---|---|---|
| 0 | 0 | 0 | 초기값 |
| 127 | 1111111 | 7F | signed byte 최대값 |
| 255 | 11111111 | FF | unsigned byte 최대값 |
| 256 | 100000000 | 100 | 1바이트 초과 시작 |
| 1024 | 10000000000 | 400 | 1KB |
| 65535 | 1111111111111111 | FFFF | 2바이트 최대값 |
손 계산이 번거롭거나 큰 숫자를 변환해야 할 때는 진법 변환기가 실수를 줄여준다. 10진수를 입력하면 2진수, 8진수, 16진수가 동시에 표시되고, 반대 방향 변환도 가능하다. 2~36진법까지 사용자 정의 변환도 지원한다.
원리를 한 번 이해해두면 디버깅이나 시험에서 당황하지 않는다. 자주 쓰는 값은 외워두고, 나머지는 변환기에 맡기는 게 현실적이다.