인간이 10진수(10을 밑으로 하는 진법)를 사용하는 이유는 손가락이 열 개이기 때문이며, 컴퓨터가 2진수(2를 밑으로 하는 진법)를 사용하는 이유는 트랜지스터의 물리적 상태가 켜짐(ON)과 꺼짐(OFF) 두 가지만 존재하기 때문입니다. 진법에 대한 이해는 프로그래밍, CSS 색상 코드, 디지털 회로 설계의 기초가 됩니다.
널리 쓰이는 네 가지 주요 진법
| 기수 | 진법명 | 사용 숫자 | 주 활용 분야 |
|---|---|---|---|
| 10 | 10진수 (Decimal) | 0–9 | 일상적인 수학 계산 |
| 2 | 2진수 (Binary) | 0–1 | 컴퓨터 하드웨어, 논리 회로 |
| 8 | 8진수 (Octal) | 0–7 | 유닉스 파일 권한 설정 |
| 16 | 16진수 (Hexadecimal) | 0–9, A–F | 메모리 주소, 웹 색상 코드 |
2진수의 기본 원리
2진수는 오직 0과 1만을 사용합니다. 각 자릿수는 2의 거듭제곱(1, 2, 4, 8, 16, 32, 64, 128)을 나타냅니다. 2진수 11111111은 10진수로 255(128+64+32+16+8+4+2+1)입니다.
계산 예제: 10진수 255를 2진수로 변환하기. 2로 계속 나누어 나머지를 역순으로 읽습니다:
- 255 ÷ 2 = 127 나머지 1
- 127 ÷ 2 = 63 나머지 1
- 63 ÷ 2 = 31 나머지 1
- 31 ÷ 2 = 15 나머지 1
- 15 ÷ 2 = 7 나머지 1
- 7 ÷ 2 = 3 나머지 1
- 3 ÷ 2 = 1 나머지 1
- 1 ÷ 2 = 0 나머지 1
결과: 11111111. base converter에서 직접 검증할 수 있습니다.
일상 속 16진수: 웹 색상 코드
웹의 HTML/CSS 색상은 16진수를 사용합니다. #FF5733은 빨강=FF(255), 초록=57(87), 파랑=33(51)을 뜻합니다. 16진수 한 자리는 2진수 4비트와 완벽하게 대응되므로, 1바이트(0255)를 두 자리의 16진수(00FF)로 깔끔하게 압축해 표현할 수 있습니다.
프로그래머가 16진수를 선호하는 이유
끝없이 이어지는 1과 0의 2진수 나열보다 훨씬 간결하고, 바이트 단위의 메모리 주소 및 레지스터 값을 직관적으로 식별할 수 있기 때문입니다.
자주 묻는 질문
왜 프로그래머들은 16진수를 즐겨 쓰나요? 16진수 1글자가 2진수 4비트와 정확히 일치하여 컴퓨터 메모리 단위를 가독성 높게 표기할 수 있기 때문입니다.
코드에 나오는 0x는 무슨 뜻인가요? 0x 접두사는 뒤따르는 숫자가 16진수임을 나타냅니다(예: 0xFF는 10진수 255).
2진수를 빠르게 읽는 방법은 무엇인가요? 오른쪽부터 4자리씩 묶어서 16진수로 변환하면 쉽게 읽을 수 있습니다. 2의 거듭제곱에 대한 원리는 exponents explained를 참조하세요.