모든 아티클

진법: 2진법, 8진법, 16진법이 존재하는 이유

한국어는 하나의 수량을 두 가지 완전히 다른 수 체계로 표현한다 — "하나, 둘, 셋" 같은 고유어 수사와 "일, 이, 삼" 같은 한자어 수사다. 나이를 셀 때는 고유어("스물세 살")를, 전화번호나 연도를 읽을 때는 한자어("공일공")를 쓰는 식으로 맥락에 따라 갈린다. 같은 값을 상황에 맞는 다른 표기로 바꿔 쓴다는 발상은, 이 도구가 2진법·8진법·16진법 사이에서 하는 일과 본질적으로 같다.

고유어 수사와 한자어 수사, 언제 어느 쪽을 쓰는가

나이, 시(時), 개수를 셀 때는 "한 개, 두 시간"처럼 고유어 수사가 자연스럽지만, 분(分), 연도, 금액, 전화번호에는 "삼십 분, 이천이십사 년"처럼 한자어 수사가 쓰인다. 두 체계 모두 같은 자연수를 가리키지만 표기 방식과 사용 맥락이 완전히 다르다는 점에서, 하나의 숫자가 여러 진법으로 다르게 표현되는 것과 닮아 있다.

개발자가 실제로 여는 도구 속 16진법

16진수 한 자리는 정확히 4비트에 대응하므로, 16진수 문자 두 개가 바이트 하나를 간결하게 표현한다 — CSS 색상 #3A7FD9, MAC 주소 00:1A:2B:3C:4D:5E, 디버거 스택 트레이스에 찍히는 메모리 주소 모두 결국은 2진법보다 네 배 짧은 표기로 적힌 바이트일 뿐이다.

유닉스 권한에 남은 8진법의 마지막 자리

8진법은 일상적인 쓰임에서 거의 사라졌지만 chmod 755 한 곳에서만은 여전히 버티고 있다. 8진수 한 자리가 읽기·쓰기·실행 세 권한 비트를 묶어 표현하므로 7은 "rwx", 5는 "r-x"를 의미한다 — 3비트씩 묶어 읽는 쪽이 2진수 아홉 자리를 하나하나 세는 것보다 훨씬 빠르다.

왜 필요한가

  • 색상을 CSS 16진 형식에서 10진 RGB 값으로 변환하기.
  • 비트 연산을 다룰 때 숫자의 2진 표현을 이해하기.
  • 유닉스 시스템에서 8진 파일 권한을 해독하기.

Base64가 진법 표기가 아닌 이유

Base64는 이름이 비슷해서 진법 변환과 자주 혼동되지만 본질적으로 다른 것입니다 — 이는 하나의 숫자를 표기하는 방법이 아니라 임의의 바이너리 데이터(예: 이미지나 파일)를 64개의 문자로 이루어진 텍스트 문자열로 인코딩하는 방식입니다. 숫자 255를 16진수로 표기하면 FF이지만, 같은 숫자를 1바이트로 Base64로 인코딩하면 전혀 다르게 보이며 용도 자체도 다릅니다 — 바이너리 데이터를 텍스트 채널로 전송하는 것이 목적입니다.

도구 사용해보기