수와 연산 Numbers and Operations | |||
{{{#!wiki style="margin: 0 -10px -5px; min-height: calc(1.5em + 5px)" {{{#!folding [ 펼치기 · 접기 ] {{{#!wiki style="margin: -5px -1px -11px" | <colbgcolor=#765432> 수 체계 | 자연수 (수학적 귀납법 · 홀수 · 짝수 · 소수 · 합성수) · 정수 · 유리수 (정수가 아닌 유리수) · 실수 (무리수 · 초월수) · 복소수 (허수) · 사원수 | |
표현 | 숫자 (아라비아 숫자 · 로마 숫자 · 그리스 숫자) · 기수법(자연어 수 표기법 · 과학적 표기법 · E 표기법 · 커누스 윗화살표 표기법 · 콘웨이 연쇄 화살표 표기법 ·BEAF · 버드 표기법) · 진법 (십진법 · 이진법 · 8진법 · 12진법 · 16진법 · 60진법) · 분수 (분모 · 분자 · 기약분수 · 번분수 · 연분수 · 통분 · 약분) · 소수 {유한소수 · 무한소수 (순환소수 · 비순환소수)} · 환원 불능 · 미지수 · 변수 · 상수 | ||
연산 | 사칙연산 (덧셈 · 뺄셈 · 곱셈 구구단 · 나눗셈) · 역수 · 절댓값 · 제곱근 (이중근호) · 거듭제곱 · 로그 (상용로그 · 자연로그 · 이진로그) · 역산 · 검산 · 연산자 · 교환자 | ||
방식 | 암산 · 세로셈법 · 주판 · 산가지 · 네이피어 계산봉 · 계산기 · 계산자 | ||
용어 | 이항연산(표기법) · 항등원과 역원 · 교환법칙 · 결합법칙 · 분배법칙 | ||
기타 | 수에 관련된 사항 (0과 1 사이의 수 · 음수 · 작은 수 · 큰 수) · 혼합 계산 (48÷2(9+3) · 111+1×2=224 · 2+2×2) · 0으로 나누기(바퀴 이론) · 0의 0제곱 | }}}}}}}}} |
진법 Positional numeral systems | |||||
2진법 | 8진법 | 10진법 | 12진법 | 16진법 | 60진법 |
1. 개요
十六進法 / hexadecimal십육을 밑(기수)로 하는 기수법이다. 즉 0부터 15까지 0 부터 9까지 센 다음은 A 부터 F를 사용하고 16으로 올라가면서 자릿수가 바뀌는 것이 된다.
영어로는 hexadecimal(헥사데시멀)이고, 줄여서 hex(헥스)라고도 부른다. 다른 n진수는 'base n'이라고 표현하지만 2진수, 8진수, 10진수, 16진수 이 네 개는 꼬박꼬박 전용 표현(binary, octal, decimal, hexadecimal)을 써 준다.
2. 목적
컴퓨터에서 2진법을 쓰는 이유는 알겠는데 10진법도 아닌 어중간한 16진법까지 배우면 머리가 터질 수도 있다. 16진법을 사용하는 이유는 이진법으로 표기된 8자리의 1바이트 값을 16진법 단 2자리 문자 만으로 표현할 수 있기 때문이다.예를 들어 1바이트의 값이 2진법으로
0101 1111
라면 16진법으로 5F
로 표기하면 그만이다. 가독성은 물론 표시 공간도 훨씬 줄어들고 16진법 숫자를 읽는데에 익숙해지면 바로바로 알아보는 것도 가능해진다.- 16진법을 2진법으로 바로 변환하려면 각 자릿수를 2진법으로 변환하면 된다. 예를 들면
25FB
16를0010
2(=2
16),0101
2(=5
16),1111
2(=F
16),1011
2(=B
16)처럼 끊어서 변환한 다음 전부 붙여서 {{10 0101 1111 1011}}2로 적으면 된다. - 반대로, 2진법을 16진법으로 바로 변환하려면 일의 자리에서부터 4개씩 끊어서 16진법으로 변환해주면 된다.
10111010101010101011110100010
2를(000)1 0111 0101 0101 0101 0111 1010 0010
_2로 끊어주고 각각 변환하면175557A2
16이 된다.
3. 표기
자릿수 하나가 0~15를 표현할 수 있다. 하지만 우리가 흔히 사용하는 아라비아 숫자는 0부터 9까지 밖에 없기 때문에 10은 A, 11은 B, 12는 C, 13은 D, 14는 E, 15는 F로 로마자를 사용해 표현한다. 따라서12
는 16진수로 C
16가 되고, 15
는 16진수로 F
16가 되고, 그 다음인 16
은 16진수로 10
16이 된다. 즉, 11
16은 10진수로 11
이 아니라 16진수로 16+1이므로 17
16이 된다.일반적으로 n진수를 표기하는 방법은 수 뒤에 아래첨자로 n을 적는 것이지만, 16진법은 굉장히 흔히 쓰여서 그런지 다른 표기법도 많이 통용된다. 수 뒤에 (16)이란 기호를 붙이거나 아래첨자로 hex라고 기재하는 방식을 사용하기도 한다. 그 외에 접두어
0x
를 붙여서 0x10
처럼 표기하는 경우도 있는데, 이건 프로그래밍 언어 쪽에서 16진수 상수(리터럴)를 표현하는 방식이다.[1] 이외에도 $10
, 10h
와 같이 표기하기도 한다. 암호화폐 제로엑스(0x)가 여기서 따와서 지은 이름이다.4. 한국어로 2와 E
16진법 체계에서는 2와 E가 모두 사용되는데, 문제는 표준 한국어 발음에 의하면 이 둘의 발음이 똑같아서 발음만으로는 이 둘을 구분할 수 없다는 점이다. 때문에 2E, E2와 같은 수가 혼동되곤 한다.해결책은 여러 가지가 있다. 2는 "이", "투"(영어), "둘"(포병 숫자), "숫자 이" 중 하나로 읽고, E는 "이", "ᅙᅵ"(성문 파열음), "에코"(포네틱 코드), "알파벳 이" 중 하나로 읽으면 된다. 어떤 방식을 택하든 말하는 사람이 번거롭거나 듣는 사람이 번거로운 건 어쩔 수 없다. 참고로 학계에서는 E뿐만 아니라 6개 모두 포네틱 코드로 읽는 것이 가장 권장된다.
단, 동남 방언을 구사하는 사람들은 알파벳 E를 발음할 때성문 파열음 (ʔ)을 넣어 발음하므로 이 들어가므로 구분이 잘 된다. 비단 E뿐만 아니라 모음으로 시작하는 영어 알파벳[2]을 발음할 때는 모두 성문 파열음이 들어간다. 사실, 영어를 모국어로 구사하는 현지인들에게 해당 알파벳들을 읽어보라고 하면 아주 자연스레 성문 파열음이 들어간다. 대한민국에서는 이상하게도 일부 알파벳을 읽을 때 성문 파열음이 사라진다.
5. 여담
- 8~16비트 세대 게임에서는 능력치의 한계가 255나 65535인 게임이 많았다. 이를테면 제4차 슈퍼로봇대전까지 기체 능력치 최대치가 255이고, 대미지 최대치,전투 1회당 획득할 수 있는 자금 한계수치가 65535였다. 굳이 이런 수를 채택한 이유는 이 수가 각각 1바이트와 2바이트가 표현할 수 있는 최댓값이기 때문이다. 여기서 더 높은 수를 사용하려면 메모리를 1바이트 더 사용해야 하는데 당시에는 메모리가 워낙 적어서 절약해야 했기 때문에 구태여 그래야 할 필요 까지는 없었다.
- 도스 게임 시대에는 잡지에 게임을 에디트하는 방법이 곧잘 실리고는 했는데 다들 상세한 원리는 몰라도 PC Tools로 파일을 열어 특정 주소를 FF FF FF FF 로 고치면 좋다는 것 정도는 몸으로 익히게 되었다.
- HEX 에디터는 2진법으로 기록된 데이터들을 보기 편하게 16진법으로 보여주는 프로그램이다. 16진법으로 표현된 데이터를 보기 위해서는 Hex 기능이 제공되는 별도의 편집 프로그램이 필요하다. 보통 'EditPlus'나 'UltraEdit'과 같이 프로그램 코드를 작성할 때 사용되는 프로그램에서 제공하는 경우가 대부분이다. 또한 게임 등에서 숨겨진 조건 요소를 조건 발동 확률을 1/5, 1/10, 1/100 같은 10진수 수가 아닌 1/8, 1/16, 1/24, 1/32 등의 16진수 수(정확히는 바이트 단위)를 사용하는 것도 이러한 이유에 가깝다.
- 고전게임 고인돌 2의 패스워드는 16진법으로 구성되어, 입력할 수 있는 문자는 1~0 및 A~F뿐이다.
- Microsoft Windows 기본 제공 계산기에도 16진수↔10진수 변환기능이 있다. Windows XP 이전의 옛 계산기에는 공학용 기능에 통합되어 있었지만 Windows Vista 이후의 계산기부터는 프로그래머용 계산기로 따로 분화되어 있다.
- HTML에서 색상을 표현할 때도 쓴다. HTML 코드나 CSS 코드를 잘 보면
color:
#1FB9A6;
같은 6자리 수의 16진수가 나오는 것을 볼 수 있다. 순서대로 두 자리씩 끊어서 빛의 삼원색인 빨강, 초록, 파랑의 밝기를 각각 256단계로 지정하는 방식이다. HTML 초창기부터 나온 표현법인데, 요즘은 다른 표기법도 많아져서[3] 예전처럼 독보적으로 쓰이지는 않는다. - 컴퓨터 역사 초창기 EDVAC[4] 시절에는 0~9, ABCDEF를 사용하는 hexadecimal 대신 0~9, KSNJFL를 사용한 sexadecimal 표기를 사용했다. KSNJFL을 사용한 건 5비트 문자셋에서 4비트만 사용하기 때문.
- 야구팬 중에도 알게 모르게 접한 사람이 꽤 있는데, 삼성 라이온즈의 별명 중 하나인 B성의 B는 11의 16진법 표기이기 때문이다. 삼성이 한이닝 11실점을 할 때 구형 전광판이 이닝별 득점을 한 자릿수로만 표기할 수 있었기에[5] 사용한 일종의 궁여지책이다.
- FamiTracker 등 트랙커 프로그램 역시 16진법을 이용한다.
- 16진수로 표시되는 함수(SHA256)를 쓰는 비트코인과도 밀접한 연관성을 갖는다. 블록 헤더를 구성하는 요소들도
0x
가 들어간다.
[1] 프로그래밍 언어 쪽에서는
0o
(숫자 0 + 알파벳 소문자 o)로 8진수를, 0b
로 2진수를 표현한다.[2] A, E, F, H, I, L, M, N, O, R, S, X[3] 앞서 예를 든 color:#1FB9A6;
은 10진법으로 color:rgb(31, 185, 166);
으로도 표기 가능하다.[4] 최초의 폰노이만식 저장프로그램 컴퓨터, 2진법 사용[5] 2018년 현재는 라팍 정도를 빼면 보기 힘들다. 구형 전광판이 3루측 띠전광판에 있어 메인전광판이 11을 표기하는 와중에 해당 전광판에는 B가 뜬다.