1 ポイント 投稿者 GN⁺ 2 시간 전 | まだコメントはありません。 | WhatsAppで共有
  • 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([) AND 00 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 の代わりに使うのも、この ビット構造に由来するもの

まだコメントはありません。

まだコメントはありません。