4열로 보는 ASCII 테이블 (2017)
(garbagecollected.org)- ASCII를 7비트 중 상위 2비트(그룹) 와 하위 5비트(값) 로 나눠 4열 테이블로 배치하면, 제어 문자와 출력 문자 간의 관계가 즉시 드러남
CTRL키는 입력된 문자의 상위 비트를 0으로 만들어, 같은 하위 5비트를 공유하는 제어 문자(control character) 를 생성하는 원리- 예를 들어
[(10 11011)에 CTRL을 누르면ESC(00 11011)가 되는데, 이는 비트 AND 연산으로 설명 가능 ^J가 줄바꿈,^H가 백스페이스,^I가 탭인 이유도 동일한 구조이며, Windows 텍스트 파일의^M(CR) 표시도 같은 원리- 통상적인 ASCII 테이블은 이 패턴을 숨기지만, 32개씩 열을 나누면 설계 의도가 명확히 드러남
4열 ASCII 테이블의 발견
- Hacker News 사용자 soneil이 ASCII 테이블을 32개 단위로 4열 배치한 버전 을 게시
- 이 배치를 통해 대소문자 전환이 단일 비트 차이라는 점, 알파벳이
40h + 순서값(소문자는60h)이라는 점이 즉각적으로 파악 가능 ^\[가 왜 ESC인지도 이 테이블에서 바로 확인 가능
ASCII 7비트 인코딩 구조
- ASCII는 7비트 인코딩이며, 앞 2비트는 4개 그룹을 나타내고 뒤 5비트는 32개 값을 표현
- 그룹
00: 제어 문자 (NUL, SOH, STX, ESC 등) - 그룹
01: 특수 문자 및 숫자 (Spc, !, ", # 등) - 그룹
10: 대문자 알파벳 (@, A, B, C 등) - 그룹
11: 소문자 알파벳 (`, a, b, c 등)
- 그룹
- 같은 행에 있는 문자들은 하위 5비트가 동일하고, 그룹 비트만 다름
4열 ASCII 테이블
| 비트 | 00 (제어) | 01 (특수/숫자) | 10 (대문자) | 11 (소문자) |
|---|---|---|---|---|
| 00000 | NUL | Spc | @ | ` |
| 00001 | SOH | ! | A | a |
| 00010 | STX | " | B | b |
| 00011 | ETX | # | C | c |
| 00100 | EOT | $ | D | d |
| 00101 | ENQ | % | E | e |
| 00110 | ACK | & | F | f |
| 00111 | BEL | ' | G | g |
| 01000 | BS | ( | H | h |
| 01001 | TAB | ) | I | i |
| 01010 | LF | * | J | j |
| 01011 | VT | + | K | k |
| 01100 | FF | , | L | l |
| 01101 | CR | - | M | m |
| 01110 | SO | . | N | n |
| 01111 | SI | / | O | o |
| 10000 | DLE | 0 | P | p |
| 10001 | DC1 | 1 | Q | q |
| 10010 | DC2 | 2 | R | r |
| 10011 | DC3 | 3 | S | s |
| 10100 | DC4 | 4 | T | t |
| 10101 | NAK | 5 | U | u |
| 10110 | SYN | 6 | V | v |
| 10111 | ETB | 7 | W | w |
| 11000 | CAN | 8 | X | x |
| 11001 | EM | 9 | Y | y |
| 11010 | SUB | : | Z | z |
| 11011 | ESC | ; | [ | { |
| 11100 | FS | < | \ | | |
| 11101 | GS | = | ] | } |
| 11110 | RS | > | ^ | ~ |
| 11111 | US | ? | _ | DEL |
CTRL 키의 동작 원리
CTRL키를 누르면 입력 문자의 상위 비트가 모두 0으로 설정되어 제어 문자 그룹(00)으로 이동- 이는 비트 AND 연산으로 표현 가능:
10 11011([) AND00 11111(CTRL) =00 11011(ESC)
- 따라서
CTRL+[이 ESC를 생성하는 것은 임의 배정이 아니라 비트 연산에 기반한 설계
실용적 예시
^J(CTRL+J)는 LF(줄바꿈),^H(CTRL+H)는 BS(백스페이스),^I(CTRL+I)는 TAB- Windows 텍스트 파일을
cat -A로 확인하면^M이 표시되는데, 이는 Windows 줄바꿈이 CR+LF 방식이기 때문 - vim 사용자들이 터미널에서
CTRL+[을 ESC 대신 사용하는 것도 이 비트 구조에서 비롯된 것