유틸리티

10진수 2진수 16진수 변환, 진법 변환 원리와 빠른 방법

프로그래밍 수업 첫 시간에 "컴퓨터는 0과 1만 이해한다"는 말을 듣는다. 그런데 코드를 짜다 보면 #FF5733 같은 16진수 색상 코드, 0b1010 같은 2진수 리터럴, 0777 같은 8진수 권한 값을 만나게 된다. 왜 10진수 하나로 통일하지 않는 걸까.

진법이란 무엇인가

숫자를 표현하는 방식이다. 우리가 일상에서 쓰는 10진수는 0~9까지 열 개의 기호를 쓴다. 9 다음에 한 자리가 올라가서 10이 된다. 같은 원리로 2진수는 0과 1만 써서 1 다음에 자릿수가 올라가 10(= 십진수 2)이 된다.

진법사용 기호십진수 10의 표현
2진수0, 11010
8진수0~712
10진수0~910
16진수0~9, A~FA

왜 10진수만 쓰면 안 되나

2진수: 하드웨어의 언어

컴퓨터 회로는 전기 신호의 켜짐(1)과 꺼짐(0)으로 동작한다. 메모리, CPU, 네트워크 전부 이 두 상태의 조합으로 데이터를 처리하기 때문에, 하드웨어 수준에서는 2진수가 가장 자연스러운 표현이다.

16진수: 2진수의 축약 표현

2진수로 쓰면 숫자가 너무 길어진다. 10진수 255를 2진수로 쓰면 11111111, 8자리다. 같은 값을 16진수로 쓰면 FF, 단 2자리. 16진수 한 자리가 2진수 4자리(4비트)에 정확히 대응되기 때문에 변환이 깔끔하다.

예시 IP 주소 192.168.1.1을 2진수로 풀면 11000000.10101000.00000001.00000001이다. 네트워크 서브넷 계산이나 비트 마스킹 작업에서는 이 2진수 표현을 직접 다뤄야 한다.

8진수: 리눅스 파일 권한

리눅스에서 chmod 755 명령을 써봤다면 8진수를 이미 사용한 것이다. 7은 읽기+쓰기+실행(rwx = 111), 5는 읽기+실행(r-x = 101). 각 자릿수가 3비트에 대응되는 구조다.

변환 원리 간단 정리

10진수 → 2진수

나누기 2를 반복하고 나머지를 거꾸로 읽는다.

13 ÷ 2 = 6 나머지 1
6 ÷ 2 = 3 나머지 0
3 ÷ 2 = 1 나머지 1
1 ÷ 2 = 0 나머지 1
→ 결과: 1101

2진수 → 16진수

오른쪽부터 4자리씩 묶어서 16진수 한 자리로 바꾼다.

1101 0011 → D3

손으로 계산하면 한두 번은 되지만, 숫자가 커지면 실수가 나온다. 진법 변환기에 값을 입력하면 2진수, 8진수, 10진수, 16진수가 동시에 나오고, 2~36진법까지 사용자 정의 변환도 지원한다. ASCII 문자 코드 변환도 같은 화면에서 된다.

진법 변환은 컴퓨터를 다루는 한 계속 마주치는 작업이다. 원리를 한 번 이해해두면 색상 코드든, 네트워크 설정이든, 파일 권한이든 숫자가 읽히기 시작한다.