프로그래밍을 배우다 보면 0xFF, 0b1010 같은 표기를 마주치게 된다. 10진수로 익숙한 숫자가 갑자기 알파벳과 섞여 나오면 당황스러운데, 원리를 알면 생각보다 단순하다.
진법이란
진법은 숫자를 표현하는 체계다. 우리가 일상에서 쓰는 건 10진법(0~9의 10개 숫자), 컴퓨터가 내부적으로 쓰는 건 2진법(0과 1만 사용)이다.
| 진법 | 사용 숫자 | 쓰이는 곳 |
|---|---|---|
| 2진수 | 0, 1 | 컴퓨터 내부 연산, 논리 회로 |
| 8진수 | 0~7 | Unix 파일 권한 (chmod 755) |
| 10진수 | 0~9 | 일상생활, 수학 |
| 16진수 | 0~9, A~F | 색상 코드, 메모리 주소, MAC 주소 |
16진수에서 A=10, B=11, C=12, D=13, E=14, F=15다. 10 이상의 값을 한 자리로 표현하기 위해 알파벳을 빌려 쓴 것이다.
10진수를 다른 진법으로 바꾸는 원리
10진수 숫자를 원하는 진법의 기수로 계속 나누고, 나머지를 역순으로 읽으면 된다.
예시: 10진수 200을 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. 이게 200의 2진수 표현이다.
예시: 10진수 255를 16진수로
- 255 ÷ 16 = 15 나머지 15(F)
- 15 ÷ 16 = 0 나머지 15(F)
결과: FF. CSS에서 흰색이 #FFFFFF인 이유가 여기 있다. RGB 각 채널의 최대값 255가 16진수로 FF이기 때문이다.
자주 쓰이는 변환값 참고표
| 10진수 | 2진수 | 8진수 | 16진수 |
|---|---|---|---|
| 0 | 0 | 0 | 0 |
| 10 | 1010 | 12 | A |
| 16 | 10000 | 20 | 10 |
| 100 | 1100100 | 144 | 64 |
| 127 | 1111111 | 177 | 7F |
| 255 | 11111111 | 377 | FF |
실무에서 진법이 필요한 순간
- 웹 개발: 색상 코드
- #FF5733 같은 HEX 색상 코드는 16진수다. RGB 값(255, 87, 51)과 같은 색이지만 표기 형식이 다를 뿐이다.
- 서버 관리: 파일 권한
- Linux의
chmod 755에서 7, 5, 5는 8진수다. 각 자리가 읽기(4) + 쓰기(2) + 실행(1)의 조합이다. 7 = 4+2+1(모든 권한), 5 = 4+1(읽기+실행). - 네트워크: MAC 주소
- AA:BB:CC:DD:EE:FF 형태의 MAC 주소는 16진수 표기다. 48비트 주소를 읽기 쉽게 6쌍으로 나눈 것이다.
- 정보처리 시험
- IT 자격증 시험에서 진법 변환 문제가 단골로 출제된다. 수기로 계산하는 연습도 필요하지만, 검산용으로 도구를 활용하면 실수를 잡아낼 수 있다.
수기로 나누기를 반복하다 보면 자릿수가 많아질수록 실수가 생긴다. 진법 변환기에 숫자를 입력하면 2진수, 8진수, 10진수, 16진수가 동시에 표시되고, 2~36진법까지 사용자 정의 변환도 가능하다. 시험 공부할 때 검산 용도로 쓰면 편하다.