2진법, 8진법, 16진법의 원리와 실무 활용법
진법(Number Base)은 수를 표현하는 체계로, 위치 기수법이라고도 합니다. 각 자릿수가 특정 기수(base)의 거듭제곱을 나타내며, 자릿수의 위치에 따라 값이 달라지는 방식입니다.
우리가 일상에서 사용하는 10진법(Decimal)은 0부터 9까지 10개의 숫자를 사용합니다. 인간이 10진법을 기본으로 사용하는 이유는 손가락이 10개이기 때문이라는 설이 가장 유력합니다. 예를 들어 숫자 253은 2×10² + 5×10¹ + 3×10&sup0;으로 분해할 수 있습니다.
반면 컴퓨터는 2진법(Binary)을 사용합니다. 전기 신호의 켜짐(1)과 꺼짐(0) 두 가지 상태만으로 모든 데이터를 표현하기 때문입니다. 트랜지스터라는 반도체 소자가 전류의 흐름과 차단 두 가지 상태를 가지므로, 하드웨어 설계상 2진법이 가장 효율적이고 신뢰성이 높습니다.
핵심 개념: 진법은 숫자를 표현하는 약속입니다. 10진수 42, 2진수 101010, 16진수 2A는 모두 같은 값을 서로 다른 진법으로 표현한 것입니다.
2진법은 0과 1 두 개의 숫자만 사용하는 수 체계입니다. 컴퓨터 과학의 가장 기본이 되는 진법이며, 모든 디지털 데이터는 궁극적으로 2진수로 저장됩니다.
2진수의 한 자리를 비트(bit)라고 합니다. 8개의 비트가 모이면 1바이트(byte)가 됩니다. 1바이트로 표현할 수 있는 값의 범위는 0(00000000)부터 255(11111111)까지 총 256가지입니다.
2진수 → 10진수: 각 자릿수에 해당하는 2의 거듭제곱을 곱해서 더합니다. 예를 들어 1101(2)은 1×2³ + 1×2² + 0×2¹ + 1×2&sup0; = 8 + 4 + 0 + 1 = 13입니다.
10진수 → 2진수: 10진수를 2로 나누면서 나머지를 역순으로 나열합니다. 예를 들어 13을 2로 나누면 6 나머지 1, 6을 2로 나누면 3 나머지 0, 3을 2로 나누면 1 나머지 1, 1을 2로 나누면 0 나머지 1이므로 역순으로 읽으면 1101(2)이 됩니다.
여러 개의 불리언(참/거짓) 값을 하나의 정수에 저장하는 기법입니다. 각 비트가 하나의 옵션을 나타내므로 메모리를 절약하고 비트 연산으로 빠르게 처리할 수 있습니다. 예를 들어 읽기(4), 쓰기(2), 실행(1) 권한을 하나의 숫자로 관리할 수 있습니다.
네트워크 엔지니어링에서 서브넷 마스크는 2진수로 이해해야 합니다. 255.255.255.0은 2진수로 11111111.11111111.11111111.00000000이며, 앞 24비트가 네트워크 주소, 뒤 8비트가 호스트 주소를 나타냅니다. CIDR 표기법의 /24가 바로 이 의미입니다.
8진법은 0부터 7까지 8개의 숫자를 사용하는 수 체계입니다. 현대 프로그래밍에서 8진법이 가장 많이 사용되는 곳은 Unix/Linux 파일 권한입니다.
Linux에서 파일 권한은 읽기(r=4), 쓰기(w=2), 실행(x=1)의 조합으로 표현됩니다. chmod 755는 소유자에게 7(rwx=4+2+1), 그룹에게 5(r-x=4+0+1), 기타 사용자에게 5(r-x=4+0+1)의 권한을 부여합니다.
자주 사용되는 권한: 755(실행 파일), 644(일반 파일), 700(비공개 디렉토리), 600(비공개 파일). 이 숫자들은 모두 8진수입니다.
8진수를 10진수로 변환하는 원리는 2진수와 동일합니다. 각 자릿수에 8의 거듭제곱을 곱해서 더합니다. 예를 들어 755(8)는 7×8² + 5×8¹ + 5×8&sup0; = 448 + 40 + 5 = 493입니다.
8진수 한 자리는 정확히 3비트에 대응합니다. 8 = 2³이기 때문입니다. 따라서 2진수를 오른쪽부터 3자리씩 묶으면 바로 8진수로 변환할 수 있습니다. 예를 들어 2진수 111101101은 111|101|101로 나눌 수 있고, 각 그룹은 7|5|5이므로 8진수 755가 됩니다.
16진법은 0~9와 A(10)~F(15)까지 16개의 기호를 사용하는 수 체계입니다. 프로그래밍에서 가장 빈번하게 사용되는 진법으로, 2진수를 간결하게 표현할 수 있어 널리 활용됩니다.
웹 개발에서 색상을 지정할 때 #FF5733처럼 16진수 색상 코드를 사용합니다. 이 코드는 빨강(FF=255), 초록(57=87), 파랑(33=51)의 RGB 값을 16진수로 표현한 것입니다. 각 색상 채널은 00(0)부터 FF(255)까지의 범위를 가집니다.
디버깅할 때 메모리 주소는 0x7FFF5FBFF8AC처럼 16진수로 표시됩니다. 64비트 주소를 2진수로 쓰면 64자리가 되지만, 16진수로는 16자리로 간결하게 표현할 수 있습니다. 접두사 0x는 해당 숫자가 16진수임을 나타냅니다.
UUID(550e8400-e29b-41d4-a716-446655440000)와 MAC 주소(00:1A:2B:3C:4D:5E)는 모두 16진수로 표현됩니다. 네트워크 프로그래밍, 데이터베이스 설계, 시스템 관리에서 16진수를 읽고 이해하는 능력이 필수적입니다.
16진수 한 자리는 정확히 4비트(니블)에 대응합니다. 16 = 2&sup4;이기 때문입니다. 2진수를 4자리씩 묶으면 16진수로 바로 변환할 수 있습니다. 예를 들어 2진수 11111111은 1111|1111로 나뉘고, 각 그룹은 F|F이므로 16진수 FF(10진수 255)가 됩니다.
변환 팁: 16진수 ↔ 2진수 변환은 각 자릿수를 4비트로 대응시키면 됩니다. A=1010, B=1011, C=1100, D=1101, E=1110, F=1111을 외워두면 빠르게 변환할 수 있습니다.
프로그래밍 코딩 테스트에서 진법 관련 문제는 꾸준히 출제됩니다. 단순 변환부터 비트 연산 응용까지 다양한 유형으로 나옵니다.
진법을 이해하면 비트 연산을 직관적으로 활용할 수 있습니다. AND(&)는 두 비트가 모두 1일 때만 1, OR(|)는 하나라도 1이면 1, XOR(^)는 두 비트가 다르면 1입니다. 왼쪽 시프트(<<)는 2를 곱하는 것, 오른쪽 시프트(>>)는 2로 나누는 것과 같습니다. 이러한 비트 연산은 알고리즘 최적화와 시스템 프로그래밍에서 핵심적인 역할을 합니다.
VOCAB RUSH는 프로그래머에게 필요한 수학 개념을 게임처럼 반복 학습할 수 있는 웹 앱입니다. 12개 수학 카테고리 중에서 진법 변환과 비트 연산을 집중적으로 연습할 수 있습니다.
2진수, 8진수, 16진수 간의 변환 문제를 반복적으로 풀면서 자연스럽게 진법 변환 감각을 익힐 수 있습니다. 시간 제한이 있는 퀴즈 형식으로 출제되어 실전 코딩 테스트 환경과 유사하게 연습할 수 있습니다.
AND, OR, XOR, NOT, 시프트 연산 문제를 통해 비트 연산의 원리와 결과를 빠르게 계산하는 능력을 키울 수 있습니다. 진법 변환과 비트 연산을 함께 학습하면 컴퓨터 과학의 기초를 탄탄하게 다질 수 있습니다.
매일 10분씩 진법 변환과 비트 연산 문제를 풀면, 한 달 후에는 코딩 테스트에서 관련 문제를 빠르고 정확하게 풀 수 있는 실력을 갖추게 됩니다. 지금 바로 시작해 보세요!
VOCAB RUSH로 진법 연습하기 →