프로그래밍 수업에서 "255를 2진수로 바꿔보세요"라는 문제가 나왔다. 2로 계속 나누고 나머지를 역순으로 적으면 11111111이 된다. 한두 문제야 손으로 풀겠지만, 16진수 0xFF3A를 10진수로 바꿔야 하는 상황이라면 이야기가 다르다.
진법이란, 왜 여러 가지가 있을까
일상에서는 10진법만 쓰지만, 컴퓨터는 0과 1밖에 모른다. 그래서 2진법이 컴퓨터의 기본 언어다. 2진수가 너무 길어지면 4자리씩 묶어서 16진수로 줄여 쓰고, 8자리씩 묶으면 8진수가 된다.
| 진법 | 사용 숫자 | 예시 (10진수 255) | 주요 용도 |
|---|---|---|---|
| 2진수 | 0, 1 | 11111111 | 컴퓨터 내부 연산 |
| 8진수 | 0~7 | 377 | 유닉스 파일 권한 |
| 10진수 | 0~9 | 255 | 일상 숫자 체계 |
| 16진수 | 0~9, A~F | FF | 색상 코드, 메모리 주소 |
실무에서 진법 변환이 필요한 경우
- CSS 색상 코드 : #FF5733 같은 HEX 코드가 16진수다. RGB 값(255, 87, 51)으로 바꾸려면 16진수 → 10진수 변환이 필요하다
- 네트워크 서브넷 마스크 : 255.255.255.0을 2진수로 바꾸면 어디까지가 네트워크 주소인지 파악할 수 있다
- 리눅스 파일 권한 : chmod 755에서 7, 5, 5는 각각 2진수 111, 101, 101이다. 읽기/쓰기/실행 권한을 나타낸다
- 디버깅 : 메모리 주소나 에러 코드가 16진수로 표시되는 경우가 많다
변환하는 두 가지 방법
수동 계산
10진수를 2진수로 바꾸려면 해당 수를 2로 계속 나누면서 나머지를 기록하고, 마지막에 역순으로 읽으면 된다. 10진수 → 16진수는 16으로 나누는 방식이다. 원리를 이해하기엔 좋지만 큰 숫자에서는 실수가 잦다.
변환 도구 사용
숫자 하나를 넣으면 2진수, 8진수, 10진수, 16진수를 동시에 보여주는 온라인 진법 변환기가 있다. 2~36진법까지 사용자 지정도 가능하고, ASCII 문자 코드 변환까지 지원해서 개발 중에 빠르게 확인할 때 유용하다.
TIP 윈도우 기본 계산기에도 '프로그래머' 모드가 있지만, 한 번에 하나의 진법만 볼 수 있다. 네 가지 진법을 동시에 비교하려면 웹 도구가 편하다.
자주 쓰는 변환 값 참고표
| 10진수 | 2진수 | 16진수 | 비고 |
|---|---|---|---|
| 0 | 0000 | 0 | - |
| 10 | 1010 | A | 16진수 시작 |
| 127 | 01111111 | 7F | ASCII 범위 끝 |
| 255 | 11111111 | FF | 1바이트 최대값 |
| 1024 | 10000000000 | 400 | 1KB |
진법 변환은 시험 때만 쓰고 끝나는 게 아니다. 개발, 네트워크, 보안 분야에서 일상적으로 마주치는 작업이니, 원리를 한 번 이해해두면 두고두고 쓸모가 있다.