ASCII コードとキーボード

昨日、ASCII コード表をボーっと眺めていて気がついたんだけど:

文字 16進 文字 16進 文字 16進 文字 16進
NUL 0x00 DLE 0x10 SP 0x20 0 0x30
SOH 0x01 DC1 0x11 ! 0x21 1 0x31
STX 0x02 DC2 0x12 " 0x22 2 0x32
ETX 0x03 DC3 0x13 # 0x23 3 0x33
EOT 0x04 DC4 0x14 $ 0x24 4 0x34
ENQ 0x05 NAK 0x15 % 0x25 5 0x35
ACK 0x06 SYN 0x16 & 0x26 6 0x36
BEL 0x07 ETB 0x17 ' 0x27 7 0x37
BS 0x08 CAN 0x18 ( 0x28 8 0x38
HT 0x09 EM 0x19 ) 0x29 9 0x39
NL 0x0a SUB 0x1a 0x2a : 0x3a
VT 0x0b ESC 0x1b + 0x2b ; 0x3b
NP 0x0c FS 0x1c , 0x2c < 0x3c
CR 0x0d GS 0x1d - 0x2d = 0x3d
SO 0x0e RS 0x1e . 0x2e > 0x3e
SI 0x0f US 0x1f / 0x2f ? 0x3f
文字 16進 文字 16進 文字 16進 文字 16進
@ 0x40 P 0x50 ` 0x60 p 0x70
A 0x41 Q 0x51 a 0x61 q 0x71
B 0x42 R 0x52 b 0x62 r 0x72
C 0x43 S 0x53 c 0x63 s 0x73
D 0x44 T 0x54 d 0x64 t 0x74
E 0x45 U 0x55 e 0x65 u 0x75
F 0x46 V 0x56 f 0x66 v 0x76
G 0x47 W 0x57 g 0x67 w 0x77
H 0x48 X 0x58 h 0x68 x 0x78
I 0x49 Y 0x59 i 0x69 y 0x79
J 0x4a Z 0x5a j 0x6a z 0x7a
K 0x4b [ 0x5b k 0x6b { 0x7b
L 0x4c \ 0x5c l 0x6c 0x7c
M 0x4d ] 0x5d m 0x6d } 0x7d
N 0x4e ^ 0x5e n 0x6e ~ 0x7e
O 0x4f _ 0x5f o 0x6f DEL 0x7f

日本語キーボードの数字の部分って、Shift と同時押しで記号が入力できるけど、実はその配列は ASCII コードで 0x10 を引いた記号の並びになってるのね。

また、それ以外の記号も基本、上位ビットの演算で求められるようになってるのね。

日本語キーボードは結構規則正しいのに、なんで英語キーボードは記号の配置が適当なんでしょう?