シリーズ「コンピュータの文字のしくみ」 第1回

回路が「文字にする」とは?

掲示板の中身

駅のホームで、次の電車を知らせる掲示板を見上げる。 種別、行き先、発車の時刻、何両で来るか。

少し前まで、この掲示板の多くは、板をめくって文字を替えていた。 パタパタという音から、そのまま「パタパタ」と呼ばれている。 いまは、パタパタは減ってきていて、代わりに、細かい点が光って文字を描く掲示板が増えている。

2 つの掲示板は、似ているようで、まるで違う。

パタパタの板には、行き先の名前が、はじめから刷ってある。 出せるのは、刷ってある板の文字だけだ。 新しい駅ができたら、板を作って足さなければならない。

光る掲示板には、文字の板が無い。 点を光らせて、どんな形でも描ける。 では、「次は、どの文字を描くか」は、どうやって掲示板に伝わっているのだろう。

掲示板の向こうには、コンピュータがある。 そして、コンピュータの中にも、そこから掲示板へ延びる線の中にも、文字の形をしたものは入っていない。 あるのは、0 と 1 だけだ。 『記憶のしくみ』を読んだ人は、第5回のパタパタを思い出してほしい。あれは、めくっている途中の板に、ありもしない時刻が出てしまう話だった。

0 と 1 しかないところで、どうやって「品川」や「A」を伝えるのか。 このシリーズでは、0 と 1 が文字になるまでを、掲示板の中身をたどりながら見ていく。

ほかのシリーズを読んでいなくても、心配はいらない。 要るのは、0 と 1 の区別だけだ。

パターンに、名札を貼る

0 と 1 は、2 通りしかない。 これでは、文字を 2 つしか区別できない。

そこで、何桁か並べて使う。 1 桁なら 2 通り。2 桁なら 00・01・10・11 の 4 通り。 1 桁増えるたびに、通りの数は倍になる。 2、4、8、16、32、64、128、256。 8 桁並べれば、256 通りだ。

このような 0 と 1 の並びを、このサイトではパターンと呼ぶ。 コンピュータは、パターンを 8 桁ずつのまとまりで扱うことが多い。 このまとまりを、このシリーズでは語と呼ぶ。一般にはバイトという名前で知られている(この名前は、ここで一度出すだけにする)。

さて、ここからが本題だ。 パターンに、文字を割り当てる。

0100 0001 は「A」。0100 0010 は「B」。 パターン 1 つ 1 つに、文字を書いた名札を貼っていくようなものだ。 このシリーズでは、この割り当てを名札と呼ぶ。 名札を 1 枚ずつ決めて、表にしておく。 書く人も読む人も同じ表を使えば、0 と 1 しか送れない線でも、文章を送れる。

パターンと文字の対応を決めた約束を、文字コードという。

困るのは、表を作る人がばらばらだと、ある会社の機械で書いた文章を、別の会社の機械で読めないことだ。 そこで、1963 年、アメリカの規格の団体(アメリカ規格協会)が、1 つの表を決めた。 ASCII(アスキー)という。American Standard Code for Information Interchange、「情報をやりとりするための、アメリカの標準の符号」の頭文字である。

ASCII が使うのは、7 桁ぶん、つまり 128 通りだ。 8 桁の語に入れるときは、いちばん上の桁を 0 にしておく。

はじめの版の ASCII には、小文字が無かった。 小文字は、のちの改訂で、空けてあった場所に入った。 その置き方には、ちょっとした工夫がある。それは、この回の後半で見る。

押して、確かめる

ASCII の表を、そのまま押せるようにしてみた。

文字の表 シミュレータ

8 つのマスを押して、パターンを作ってみてください

0100 0001 を文字として読むと

A

読み方の約束(ASCII の表)。人間のメモで、回路はこの表を見ていない
上 →
下 ↓
0000
0001
0010
0011
0100
0101
0110
0111
0000
␣
0
@
P
`
p
0001
!
1
A
Q
a
q
0010
"
2
B
R
b
r
0011
#
3
C
S
c
s
0100
$
4
D
T
d
t
0101
%
5
E
U
e
u
0110
&
6
F
V
f
v
0111
'
7
G
W
g
w
1000
(
8
H
X
h
x
1001
)
9
I
Y
i
y
1010
*
:
J
Z
j
z
1011
+
;
K
[
k
{
1100
,
<
L
\
l
|
1101
-
=
M
]
m
}
1110
.
>
N
^
n
~
1111
/
?
O
_
o

灰色のマスは、目に見える文字ではなく「合図」。␣ は空白

上の 8 つのマスが、語の 8 桁だ。 押すと、0 と 1 が切り替わる。

はじめは 0100 0001。 下の表で、光っているマスを探してほしい。 「A」のマスが光っている。

表の見方は、こうだ。 上 4 桁で列を選び、下 4 桁で行を選ぶ。 0100 0001 なら、0100 の列の、0001 の行。

右の 2 つのマスを押して、0100 0010 にしてみてほしい。 光るマスが 1 つ下へ動く。「B」だ。 英字は、表の中にアルファベットの順で並んでいる。

今度は、いちばん左のマスを押して 1 にしてみてほしい。 表の中のどこも光らなくなる。 ASCII は 7 桁ぶんしか決めていないので、いちばん上の桁が 1 のパターンは、この表の外にある。

表の見出しを、もう一度見てほしい。 灰色の字で、「人間のメモで、回路はこの表を見ていない」と書いてある。

回路が持っているのは、上の 8 つのマスだけだ。 8 本の線のうち、どれが 1 で、どれが 0 か。 それを「A」と読んでいるのは、下の表のほうである。

数の 1 と、文字の「1」

表の中には、数字もある。 0011 の列を見てほしい。「0」から「9」までが並んでいる。

ここで、少し引っかかることがある。 パターンは、そもそも数を表すのにも使う。

8 桁のパターンを数として読むときは、右の桁から順に、1 の位、2 の位、4 の位、8 の位……と、位の重みを倍々にしていく。 いちばん左は 128 の位だ。 1 の立っている位の重みを足せば、ふつうの数になる。

0000 0001 なら、1 の位だけが 1 なので、数の 1。 では、表で「1」の字が書いてあるマスは、どのパターンか。 0011 の列の 0001 の行。0011 0001 だ。

同じ「1」でも、数の 1 と、文字の「1」は、別のパターンなのである。

0011 0001 を数として読むと、32 + 16 + 1 で、49 になる。 下のシミュレータで、読み方を切り替えてみてほしい。

文字の表 シミュレータ

8 つのマスを押して、パターンを作ってみてください

0011 0001 を文字として読むと

1

読み方の約束(ASCII の表)。人間のメモで、回路はこの表を見ていない
上 →
下 ↓
0000
0001
0010
0011
0100
0101
0110
0111
0000
␣
0
@
P
`
p
0001
!
1
A
Q
a
q
0010
"
2
B
R
b
r
0011
#
3
C
S
c
s
0100
$
4
D
T
d
t
0101
%
5
E
U
e
u
0110
&
6
F
V
f
v
0111
'
7
G
W
g
w
1000
(
8
H
X
h
x
1001
)
9
I
Y
i
y
1010
*
:
J
Z
j
z
1011
+
;
K
[
k
{
1100
,
<
L
\
l
|
1101
-
=
M
]
m
}
1110
.
>
N
^
n
~
1111
/
?
O
_
o

灰色のマスは、目に見える文字ではなく「合図」。␣ は空白

切り替えても、上の 8 つのマスは、1 つも変わらない。 変わるのは、下に出てくる答えだけだ。 同じ 0011 0001 が、文字として読めば「1」、数として読めば 49 になる。

読み方を取り違えると、おかしなことが起きる。 文字の「1」と「2」を、数のつもりで足してしまったとしよう。 0011 0001 は 49、0011 0010 は 50。足すと 99 だ。 99 は 0110 0011。これを文字として読むと、「c」になる。 1 + 2 が「c」。 回路は、言われたとおりに足しただけである。

パターンそのものは、数でも文字でもない。 数として読むか、文字として読むか、どの表で読むかを決めているのは、読む側だ。

さきほど、パターンに文字の名札を貼っていく、と書いた。 けれど、名札は、パターンに貼り付けてあるわけではない。 0011 0001 のどこにも、「1」とも 49 とも書いていない。 名札を貼るのは、読む側だ。 読むたびに、手に持った表から名札を取って貼っている。

回路の中にあるのはパターンだけ。どのパターンをどの文字と読むかは、人が決めた約束(名札)だ。

『計算のしくみ』を読んだ人は、第4回の「12 と書くか -4 と書くかは、席に貼る名札の違いでしかない」を思い出してほしい。あれは数どうしの読み替えだったが、名札の貼り替えは、数と文字のあいだにまで広がっている。

1 桁だけ、違う

表の「A」と「a」を見比べてみよう。

文字パターン数として読むと
A0100 000165
a0110 000197

並べてみると、違うのは、左から 3 桁目の 1 桁だけだ。 その桁の重みは 32。65 と 97 も、ちょうど 32 違う。

「B」と「b」も、「Z」と「z」も、同じだ。 大文字と小文字は、どれも、この 1 桁だけが違う。

ということは、この 1 桁をひっくり返せば、大文字と小文字が入れ替わる。 それをする回路を作ってみよう。

使うのは、XOR(エックスオア)という部品を 1 つだけ。 XOR は、2 つの入口に 0 か 1 を受け取って、次の表のとおりに 0 か 1 を返す。

入口 1入口 2出口
000
011
101
110

2 つの入口が食い違っているときだけ、1 を返す。

この表を、入口 1 を「切り替え」と思って読み直してみてほしい。 切り替えが 0 の上 2 行では、出口は入口 2 と同じ。そのまま通している。 切り替えが 1 の下 2 行では、出口は入口 2 の反対。ひっくり返している。

そこで、8 本の線のうち、左から 3 桁目の線にだけ、XOR をはさむ。 もう一方の入口には、「大文字 ↔ 小文字」の切り替えスイッチをつなぐ。 ほかの 7 本には、何もしない。

大文字 ↔ 小文字 シミュレータ

「大文字 ↔ 小文字」のスイッチを押してみてください。左の 8 つのスイッチで、入口のパターンも替えられます

XOR入口のパターン出口のパターン大文字 ↔ 小文字001000001
入口を表で読むと0100 0001A
出口を表で読むと0100 0001A

切り替えが 0 のあいだ、XOR は 32 の位をそのまま通す。出口は入口と同じ

はじめ、入口は 0100 0001、「A」だ。 「大文字 ↔ 小文字」のスイッチを押してみてほしい。 出口が 0110 0001 になり、「a」と読める。 もう一度押すと、「A」に戻る。

左のスイッチで、入口をほかの英字にしても同じだ。 英字なら、52 文字のどれでも、大文字と小文字が入れ替わる。

この回路は、「A」も「a」も知らない。 左から 3 桁目の線を、ひっくり返しているだけだ。 それを「大文字が小文字になった」と読んでいるのは、ここでもやはり、表を手に持った私たちのほうである。

英字ではないものを入れると、それがよく分かる。 入口を 0011 0001(文字の「1」)にして、切り替えてみてほしい。 出口は 0001 0001。表では、目に見えない「合図」のマスになる。 「@」は「`」に、「[」は「{」に変わる。 回路はいつも同じことをしている。意味が通るのは、英字のときだけだ。

大文字と小文字が 1 桁だけ違うのは、偶然ではない。 小文字を表に入れるとき、大文字とちょうど 32 ずれた場所に、同じ順で並べたのだ。 こうしておくと、大文字と小文字を区別せずに文字を比べたり、キーボードや印字の機械を作ったりするのが楽になる。 表を決めた人たちは、名札の貼り方を、回路が扱いやすいように選んでいた。

『計算のしくみ』を読んだ人は、第1回の XOR を思い出してほしい。あそこでは、同じ XOR が「足し算の答えの桁」を出していた。同じ部品の同じ働きが、足し算にも、大文字と小文字にもなる。

目に見えない文字

表の中の灰色のマスを、数えてみよう。 左の 2 列(0000 と 0001 の列)の 32 マスと、右下の隅の 1 マス。 あわせて 33 マスある。

ここに入っているのは、目に見える文字ではない。 機械に何かをさせるための合図だ。 いくつか拾ってみる。

パターン名前意味
0000 0111BELベルを鳴らす
0000 1000BS1 文字戻る
0000 1010LF改行(次の行へ進む)
0000 1101CR行の頭へ戻る
0111 1111DEL消す

残りの 95 マスが、目に見える文字だ。 0010 0000 の空白から、0111 1110 の「~」まで。 英字の大文字と小文字が 52、数字が 10、残りの 33 が空白と記号である。

文章の中の改行も、こうした合図のパターンの 1 つとして、文字と文字のあいだに並んでいる。 画面で行が変わって見えるのは、読む側がそのパターンを見つけて、次の行へ進めているからだ。

足りない

128 通りの表で、英語の文章は書けた。 大文字と小文字、数字、記号、それに改行などの合図。

けれど、駅の掲示板には、日本語も出る。 ひらがな、カタカナ、漢字。 128 通りでは、とても足りない。 この話は、もう少し先の回でする。

その前に、1 つ、片付けていないことがある。

掲示板に届くのは、0100 0001 のようなパターンだ。 けれど、掲示板に光っているのは、「A」の形である。

表を引いて、0100 0001 を「A」と読めるのは、人間だ。 回路は、表を見ていない。 「A」がどんな形をしているのかも、知らない。

それでも掲示板は、点を光らせて、ちゃんと「A」の形を描いている。

パターンを、どうやって光る形にするのか。

次回は、いちばん簡単な形から始める。掲示板の、発車の時刻の数字だ。

参考文献

シリーズ「コンピュータの文字のしくみ」