2진수와 16진수는 같은 수를 다르게 적는 방법일 뿐입니다. 기계가 2진법을 쓰는 이유, 16진법이 편한 이유, 손으로 바꾸는 방법과 파일 권한의 8진수 읽는 법을 정리했습니다.
📚 단위와 표기, 왜 이렇게 여러 개인가 · 3/12·⏱ 읽는 데 약 4분·정보 업데이트 2026-10-01
📋 기본 정보4
핵심
진법은 수를 적는 방법이지 수 자체가 아니다
2진수
전기가 켜짐·꺼짐 두 상태라서 기계와 맞는다
16진수
2진수 네 자리가 정확히 한 자리가 되어 짧게 적힌다
주의
0x, 0b 같은 접두어가 붙지 않으면 무슨 진법인지 알 수 없다
10진법은 손가락 때문이다
우리가 10진법을 쓰는 데 수학적인 이유는 없습니다. 손가락이 열 개라서 그렇게 굳었을 뿐입니다. 진법은 몇 개마다 자리를 올릴지에 대한 약속이고, 어떤 진법으로 적어도 수 자체는 같습니다. 255와 0xFF와 0b11111111은 같은 수를 세 가지 방법으로 적은 것입니다. 역사적으로는 다른 진법도 쓰였습니다. 1시간이 60분, 원이 360도인 것은 60진법의 흔적이고, 영어의 다스(12개)도 12진법의 흔적으로 볼 수 있습니다.
기계가 2진법을 쓰는 이유
전자 회로가 안정적으로 구분할 수 있는 상태는 전압이 높은가 낮은가 두 가지입니다. 열 단계를 구분하려면 잡음에 훨씬 약해집니다. 그래서 컴퓨터는 두 상태로 모든 것을 표현하고, 그 표기가 2진법입니다. 비트 하나는 이 두 상태 중 하나를 담는 자리입니다. 비트 여덟 개를 묶은 것이 1바이트이고, 1바이트는 2의 8제곱인 256가지 값, 즉 0부터 255까지를 담을 수 있습니다.
16진법이 편한 이유
2진수는 자릿수가 너무 길어 사람이 읽기 어렵습니다. 16은 2의 네 제곱이라, 2진수 네 자리가 16진수 한 자리로 정확히 떨어집니다. 그래서 2진수와 16진수 사이의 변환은 계산 없이 네 자리씩 끊어 바꾸기만 하면 됩니다. 색 코드나 메모리 주소를 16진수로 적는 이유가 이것입니다. IPv6 주소나 기기의 MAC 주소처럼 바이트를 나열해야 하는 곳에서도 16진수가 기본 표기입니다.
2진수 1111 = 16진수 F = 10진수 15
2진수 여덟 자리 = 16진수 두 자리 = 1바이트
16진수는 0~9 다음에 A~F를 쓴다
8진법은 세 자리씩 끊어지며, 파일 권한 표기에 쓰인다
무슨 진법인지 표시하기
10이라고만 적혀 있으면 10진수 십인지 2진수 둘인지 알 수 없습니다. 그래서 프로그래밍에서는 0x를 붙여 16진수, 0b를 붙여 2진수임을 표시합니다. 접두어 없이 적힌 숫자를 다른 진법으로 착각해 생기는 오류는 찾기 어려우므로, 표기를 분명히 하는 편이 안전합니다. 언어에 따라 8진수는 0o를 붙이거나 숫자 앞에 0을 붙여 표시하는데, 앞에 0이 붙은 숫자를 8진수로 읽는 환경도 있어 주의가 필요합니다. 010이 10이 아니라 8로 읽힐 수 있습니다.
손으로 바꾸는 방법
10진수를 다른 진법으로 바꾸려면 그 진법의 수로 계속 나누면서 나머지를 거꾸로 적으면 됩니다. 반대로 다른 진법을 10진수로 바꾸려면 각 자리에 그 진법의 거듭제곱을 곱해 더합니다. 자주 쓰는 값 몇 개를 외워 두면 대부분의 상황에서 계산이 필요 없어집니다. 예를 들어 13을 2진수로 바꾸면 13÷2=6 나머지 1, 6÷2=3 나머지 0, 3÷2=1 나머지 1, 1÷2=0 나머지 1이므로 나머지를 거꾸로 읽어 1101이 됩니다. 거꾸로 1101은 8+4+0+1=13입니다.
파일 권한의 8진수 읽기
유닉스 계열 시스템의 파일 권한 755나 644 같은 숫자는 8진수입니다. 한 자리가 2진수 세 자리, 즉 읽기·쓰기·실행 세 가지 권한의 켜짐과 꺼짐을 나타냅니다. 읽기는 4, 쓰기는 2, 실행은 1이고, 이를 더한 값이 한 자리가 됩니다. 세 자리는 앞에서부터 소유자, 그룹, 그 밖의 사용자 순서입니다.
7 = 4+2+1 = 읽기·쓰기·실행 모두
5 = 4+1 = 읽기·실행
4 = 읽기만
755 = 소유자는 전부, 나머지는 읽기·실행
음수와 소수는 어떻게 적나
컴퓨터는 음수를 보통 2의 보수라는 방식으로 저장합니다. 8비트라면 0부터 255 대신 −128부터 127까지를 담는 식입니다. 그래서 같은 비트 묶음 11111111이 부호 없는 수로는 255, 부호 있는 수로는 −1로 읽힙니다. 소수는 더 까다로워서, 10진수 0.1은 2진수로 끝없이 이어지는 수라 정확히 담을 수 없습니다. 많은 프로그래밍 언어에서 0.1 더하기 0.2가 정확히 0.3이 되지 않는 이유가 이것입니다. 돈처럼 정확해야 하는 값은 정수로 바꿔 다루는 경우가 많습니다.
외워 두면 편한 값
2의 거듭제곱 몇 개를 외워 두면 진법 변환과 용량 계산이 훨씬 빨라집니다. 2의 10제곱이 1024로 1000에 가깝다는 사실은 데이터 용량을 이해하는 출발점이기도 합니다.