진법(radix)은 무엇이며 프로그래밍에서 왜 중요한가요?
진법(또는 radix)은 위치 기반 수 체계에서 사용하는 고유 숫자의 개수를 정의합니다. 10진법은 0-9, 2진법은 0-1, 16진법은 0-9와 A-F를 사용합니다. 프로그래밍에서 2진법은 원시 기계 데이터를 표현하고, 8진법은 Unix 파일 권한(예: chmod 755)에 사용되며, 16진법은 메모리 주소, 색상 코드(#FF5733), 바이트 단위 데이터 검사에 사용되는 표준입니다. 진법을 이해하는 것은 디버깅, 네트워킹, 저수준 프로그래밍에서 필수적입니다.
진법 간 수동 변환은 어떻게 하나요?
임의 진법에서 10진법으로 변환할 때는 각 자리의 숫자에 해당 진법을 자리 위치(오른쪽에서 0부터 시작)만큼 거듭제곱한 값을 곱한 뒤 모두 더합니다. 예를 들어 2진수 1011은 1×2³ + 0×2² + 1×2¹ + 1×2⁰ = 8+0+2+1 = 11입니다. 10진법에서 다른 진법으로 변환할 때는 대상 진법으로 반복해서 나누면서 나머지를 역순으로 모읍니다. 예를 들어 10진수 255를 16진수로 변환하면 255÷16 = 15 나머지 15로 FF가 됩니다.
이 진법 변환기 사용 시 데이터는 안전한가요?
예, 완전히 안전합니다. 모든 변환은 JavaScript를 이용해 브라우저 내부에서 로컬로 실행됩니다. 서버로 전송되는 데이터는 없으며 네트워크 요청, 쿠키, 입력 내용에 대한 분석, 데이터 저장소가 전혀 없습니다. 입력한 숫자는 절대 기기를 떠나지 않습니다. 이 도구는 메모리 주소나 내부 바이트 시퀀스 같은 민감한 데이터를 변환하기에 적합합니다.
36진법은 무엇이며 어디에 사용되나요?
36진법은 가장 큰 영숫자 진법으로 숫자 0-9와 알파벳 A-Z(여기서 A=10부터 Z=35까지)를 사용합니다. URL 단축기(예: YouTube 영상 ID), 짧은 고유 식별자, 데이터베이스 기본 키, 큰 숫자를 사람이 읽기 쉬운 짧은 문자열로 인코딩하는 데 널리 사용됩니다. 예를 들어 10진수 1,000,000은 36진법으로 LFLS가 되어 훨씬 짧고 공유하기 쉽습니다. 36진법은 슬러그 친화적인 식별자를 만들 때 특히 인기가 높으며, 짧고 대소문자 구분이 없기 때문에 URL과 단축 코드에 이상적입니다.
부호 있는 숫자와 부호 없는 숫자의 차이는 무엇인가요?
부호 없는 숫자는 음이 아닌 값(0과 양수)만 표현합니다. 부호 있는 숫자는 양수와 음수를 모두 표현할 수 있으며, 컴퓨터에서는 보통 2의 보수 인코딩을 사용합니다. 2의 보수에서는 최상위 비트가 부호를 나타내어 0이면 양수, 1이면 음수입니다. 예를 들어 8비트 부호 없는 정수의 범위는 0-255이고, 8비트 부호 있는 정수(2의 보수)의 범위는 -128부터 127까지입니다.
프로그래머는 왜 2진수 대신 16진수를 사용하나요?
16진수는 2진수 데이터를 간결하게 표현하는 방식으로, 16진수 한 자리는 정확히 4비트(니블)에 대응됩니다. 덕분에 16진수는 긴 2진수 문자열보다 읽고 쓰기가 훨씬 쉽습니다. 예를 들어 2진수 11111111 00001010은 16진수로는 단지 FF0A입니다. 16진수는 메모리 주소, 색상 코드(CSS #FF5733), MAC 주소(00:1A:2B:3C:4D:5E), UUID 포맷 등에서 표준으로 쓰입니다.
이 도구는 매우 큰 숫자도 처리할 수 있나요?
예. 이 도구는 JavaScript의 BigInt를 사용해 임의 정밀도 정수 연산을 수행하므로 자릿수에 상한이 없습니다. 2에서 36 사이의 임의 진법 간에 수백, 심지어 수천 자리 숫자도 정밀도 손실 없이 변환할 수 있습니다. JavaScript의 기본 Number 타입은 53비트 정수(최대 9,007,199,254,740,991)로 제한되지만, BigInt는 이 제한을 완전히 없앱니다. 암호 해시, 큰 데이터베이스 ID, 과학 계산 어느 것이든 정확하게 처리합니다.
2진수를 16진수로 수동 변환은 어떻게 하나요?
가장 간단한 방법은 4비트 그룹화 기법입니다. 가장 오른쪽 비트에서 시작하여 2진수를 4자리(니블)씩 묶습니다. 필요하면 가장 왼쪽 그룹의 앞쪽을 0으로 채웁니다. 그런 다음 다음 대응표로 각 그룹을 변환합니다: 0000=0, 0001=1, 0010=2, 0011=3, 0100=4, 0101=5, 0110=6, 0111=7, 1000=8, 1001=9, 1010=A, 1011=B, 1100=C, 1101=D, 1110=E, 1111=F. 예를 들어 2진수 10101111은 1010과 1111로 나뉘어 각각 A와 F에 대응되므로 16진수 AF가 됩니다. 이는 16이 2의 거듭제곱(16 = 2⁴)이어서 16진수 한 자리가 정확히 4비트를 나타내기 때문에 가능합니다.
음수는 진법 간 어떻게 변환하나요?
컴퓨터에서 음수는 일반적으로 2의 보수로 표현됩니다. 이 체계에서 최상위 비트(MSB)는 부호 비트 역할을 하여 0이면 양수, 1이면 음수입니다. 어떤 수의 2의 보수를 구하려면 모든 비트를 반전한 뒤(0은 1로, 1은 0으로) 1을 더합니다. 예를 들어 -5를 8비트 2진수로 표현하려면 5(00000101)에서 시작해 반전하여 11111010을 얻은 뒤 1을 더해 11111011을 얻습니다. 따라서 8비트 2의 보수에서 -5는 2진수로 11111011, 16진수로 FB입니다. n비트 2의 보수 숫자의 범위는 -2^(n-1)부터 2^(n-1)-1까지입니다. 이 도구는 숫자의 크기를 변환하므로 부호 있는 표현이 필요하면 2의 보수를 수동으로 적용하면 됩니다.
16진수와 10진수의 차이는 무엇인가요?
10진수(10진법)는 숫자 0-9를 사용하며 사람에게 가장 익숙한 일상적인 수 체계입니다. 16진수(16진법)는 16개의 기호(0-9와 A-F)를 사용하며 컴퓨팅에서 선호되는 형식입니다. 핵심 차이는 자릿값입니다. 10진수에서는 각 자리가 10의 거듭제곱(1, 10, 100, 1000…)을 나타내지만, 16진수에서는 16의 거듭제곱(1, 16, 256, 4096…)을 나타냅니다. 예를 들어 10진수 255는 15×16 + 15×1 = 255이므로 16진수로 FF입니다. 16진수는 2진수에 깔끔하게 대응되어 한 자리가 정확히 4비트를 나타내므로 메모리 주소, 색상 코드, 바이트 단위 데이터를 다룰 때 이상적이어서 프로그래밍에서 선호됩니다.
컴퓨터는 왜 10진수 대신 2진수를 사용하나요?
컴퓨터는 그 기본 구성 요소인 트랜지스터가 켜짐(1)과 꺼짐(0) 두 상태를 갖는 전자 스위치처럼 동작하기 때문에 2진수(2진법)를 사용합니다. 이는 2진수 자릿값에 완벽히 대응됩니다. 10진수 자릿값을 표현하려면 10가지 전압 수준을 안정적으로 구분할 수 있는 회로가 필요한데, 이는 2가지 상태만 구분하는 것보다 훨씬 복잡하고 오류가 쉽게 발생합니다. 2진수는 모든 컴퓨터 연산의 기반이 되는 불 논리(참/거짓)와도 자연스럽게 일치합니다. 초기 컴퓨터는 3진법이나 10진법도 실험했지만, 전자 회로에서 단순성, 신뢰성, 노이즈 내성의 조합이 가장 뛰어나 2진수가 최종적으로 채택되었습니다.
Unix 파일 권한은 왜 8진수로 표현되나요?
Unix 파일 권한은 소유자, 그룹, 기타라는 세 범주를 사용하며, 각 범주는 읽기(r=4), 쓰기(w=2), 실행(x=1)이라는 세 개의 권한 비트를 가집니다. 3비트는 0-7 범위의 값을 표현할 수 있으므로 각 범주가 8진수 한 자리에 완벽하게 대응됩니다. 예를 들어 권한 755는 소유자가 rwx(7 = 4+2+1), 그룹이 r-x(5 = 4+0+1), 기타가 r-x(5 = 4+0+1)임을 의미합니다. 각 자리가 하나의 권한 그룹을 정확히 인코딩하기 때문에 8진법이 자연스러운 선택입니다. 2진수로 755는 111 101 101이며 rwx 비트 패턴을 곧바로 보여 줍니다. 이 우아한 3비트-1자리 매핑이 chmod가 8진법 표기를 사용하는 이유입니다.
16진수 색상은 웹 개발에서 어떻게 사용되나요?
웹 개발에서 색상은 보통 #RRGGBB 16진수 형식으로 지정하며, 각 쌍이 하나의 색상 채널(빨강, 초록, 파랑)을 나타냅니다. 각 채널은 00(0, 밝기 없음)부터 FF(255, 최대 밝기)까지의 범위를 가집니다. 예를 들어 #FF5733은 빨강=FF(255), 초록=57(87), 파랑=33(51)을 의미하며, 선명한 주황빛 빨강을 만듭니다. 단축 표기도 있어 #F00은 #FF0000(순수한 빨강)로 확장됩니다. 최신 CSS는 알파 투명도를 위한 #RRGGBBAA도 지원하며, AA는 00(완전 투명)부터 FF(완전 불투명)까지의 범위를 가집니다. 16진수 두 자리가 한 바이트(0-255)를 완벽히 표현하므로 색상 값으로 간결하고 읽기 쉬운 형식입니다.
진법 변환은 네트워킹에서 어떻게 활용되나요?
진법 변환은 IP 주소, 서브넷 마스크, MAC 주소를 다룰 때 네트워킹에서 필수적입니다. 192.168.1.1 같은 IPv4 주소는 10진수로 표기하지만, 서브넷 계산에는 2진수가 필요합니다. 예를 들어 /24 서브넷 마스크는 2진수로 11111111.11111111.11111111.00000000이고 10진수로는 255.255.255.0입니다. 네트워크 엔지니어는 2진수로 IP 주소와 서브넷 마스크를 비트 AND 연산하여 네트워크 주소를 구합니다. MAC 주소는 각 16진수 쌍이 한 바이트를 나타내므로 16진수 표기(예: 00:1A:2B:3C:4D:5E)를 사용합니다. 진법 변환을 이해하면 서브넷 계산, 라우팅 문제 해결, 패킷 캡처 분석에 큰 도움이 됩니다.
이 도구는 프로그래밍 언어의 내장 변환 함수와 비교하면 어떤가요?
프로그래밍 언어는 내장 변환 함수를 제공합니다. JavaScript에는 parseInt()와 toString(), Python에는 bin(), oct(), hex(), int()가 있습니다. 하지만 이 도구에는 여러 장점이 있습니다. 주요 진법을 모두 동시에 실시간으로 업데이트하며, 코드를 작성할 필요가 없고, 하나의 인터페이스에서 2에서 36까지 어떤 진법이든 지원하며, 일부 언어의 기본 정밀도를 넘어 임의 정밀도를 위해 BigInt를 사용합니다. 빠른 조회, 코드 출력 검증, 진법 변환 개념을 시각적으로 학습, 언어 내장으로 직접 지원되지 않는 진법 작업에 적합합니다. 실제 프로덕션 코드에서는 해당 언어의 기본 함수를 사용하고, 탐색과 디버깅에는 이 도구가 더 빠르고 편리합니다.