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 の代わりに使うのも、この ビット構造に由来するもの
まだコメントはありません。