유틸리티

진법 변환 쉽게 이해하기 (2진수, 10진수, 16진수)

코딩을 시작하면 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로 나누면서 나머지를 아래에서 위로 읽으면 된다.

  1. 13 / 2 = 6 ... 나머지 1
  2. 6 / 2 = 3 ... 나머지 0
  3. 3 / 2 = 1 ... 나머지 1
  4. 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다. 이 패턴만 외워두면 머릿속 변환이 훨씬 빨라진다.