코딩을 시작하면 0xFF, 0b1010 같은 표기를 만나게 된다. 10진수 255가 왜 16진수로 FF인지, 2진수로 왜 11111111인지 처음에는 감이 안 잡힌다. 원리만 알면 단순 반복이라 어렵진 않다.
왜 10진수만 쓰면 안 되나
컴퓨터는 전기 신호의 켜짐(1)과 꺼짐(0)으로 데이터를 처리한다. 그래서 내부적으로 모든 값이 2진수다. 하지만 2진수는 자릿수가 너무 길어서 사람이 읽기 어렵고, 그걸 줄여서 표현한 게 8진수와 16진수다.
- 2진수 (Binary)
- 0과 1로만 표현. 컴퓨터 내부 동작의 기본 단위. 예: 1010 = 10진수 10
- 8진수 (Octal)
- 0~7까지 사용. 리눅스 파일 권한(chmod 755)에서 자주 등장한다.
- 10진수 (Decimal)
- 일상에서 쓰는 숫자 체계. 0~9까지 사용.
- 16진수 (Hexadecimal)
- 0~9, A~F까지 사용. 색상 코드(#FF5733), 메모리 주소에서 흔히 쓴다.
10진수를 2진수로 바꾸는 원리
10진수 13을 2로 나누면서 나머지를 아래에서 위로 읽으면 된다.
- 13 / 2 = 6 ... 나머지 1
- 6 / 2 = 3 ... 나머지 0
- 3 / 2 = 1 ... 나머지 1
- 1 / 2 = 0 ... 나머지 1
아래에서 위로 읽으면 1101. 이게 13의 2진수 표현이다. 16진수도 같은 방식인데 2 대신 16으로 나눈다.
실무에서 진법이 쓰이는 곳
| 상황 | 진법 | 예시 |
|---|---|---|
| CSS 색상 코드 | 16진수 | #3B82F6 |
| 리눅스 파일 권한 | 8진수 | chmod 644 |
| 네트워크 서브넷 마스크 | 2진수 | 11111111.11111111.11111111.00000000 |
| ASCII 코드 | 10진수/16진수 | A = 65 = 0x41 |
빠르게 변환하는 법
손으로 나누기를 반복하는 건 학습용으로는 좋지만, 실무에서는 속도가 중요하다. 진법 변환기에 숫자를 입력하면 2진수, 8진수, 10진수, 16진수가 동시에 나온다. 2~36진법까지 사용자 지정 변환도 되고, 문자를 넣으면 ASCII 코드까지 확인할 수 있어서 코딩 중에 탭 하나 열어두고 쓰기 편하다.
TIP 16진수에서 2진수로 바꿀 때는 각 자릿수를 4비트로 풀면 된다. F = 1111, A = 1010. 0xFF는 11111111, 즉 10진수 255다. 이 패턴만 외워두면 머릿속 변환이 훨씬 빨라진다.