プログラミングの前にコンピュータの仕組みを(8)-2で繰り上がる、二進数-
前回のはこちら。
なんだかICとかトランジスタの機能って、1とゼロの掛け算とか足し算と似ているなーというところまで来ました。
足し算っぽい
2つの入力の電線と1つの出力の電線がつながっているICで、こんな機能を持ったやつがあるとして、
$$
\begin{array}{|c:c|c|}\hline
入力1&入力2&出力 \\ \hline\hline
×&×&× \\
×&〇&〇 \\
〇&×&〇 \\
〇&〇&〇 \\
\hline\end{array}
$$
これの×(電気が来ていない)はゼロ、〇(電気が来ている)は1とみなせば、
$$
\begin{array}{|c:c|c|}\hline
入力1&入力2&出力 \\ \hline\hline
0&0&0 \\
0&1&1 \\
1&0&1 \\
1&1&1 \\
\hline\end{array}
$$
って書けるから、これって足し算の法則と似てる。
$$
0+0=0 \\
0+1=1 \\
1+0=1 \\
1+1=1 \\
$$
1+1=1でなくて1+1=2でしょ
んでも、いちばん最後の行は間違ってる・・・というところまで前回来ました。
1+1=2ですけど、2って、電気が来てる(〇)、来てない(×)の2パターンしか考えてなかったので、これは・・・どうしよう???
ということで遠い昔に頭のいい人が、出力の電線をもう一本増やして二本にして、一桁増やすと考えて、繰り上がっちゃえばいいんじゃない?って考えたようです。
1本増やして桁を増やす
つまり、こんな機能(表)を持つICを作った。
$$
\begin{array}{|c:c||c:c|}\hline
入力1&入力2&出力1&出力2 \\ \hline\hline
0&0&0&0 \\
0&1&0&1 \\
1&0&0&1 \\
1&1&1&0 \\
\hline\end{array}
$$
いいですか?
「電気が来てる」、「電気が来てない」っていう表現で書き直せば、こういう風になるICを作ったということですよ。
$$
\begin{array}{|c:c||c:c|}\hline
入力1&入力2&出力1&出力2 \\ \hline\hline
電気が来てない&電気が来てない&電気が出ない&電気が出ない \\
電気が来てない&電気が来てる&電気が出ない&電気が出る \\
電気が来てる&電気が来てない&電気が出ない&電気が出る \\
電気が来てる&電気が来てる&電気が出る&電気が出ない \\
\hline\end{array}
$$
〇×で書けばこうですね。
$$
\begin{array}{|c:c||c:c|}\hline
入力1&入力2&出力1&出力2 \\ \hline\hline
×&×&×&× \\
×&〇&×&〇 \\
〇&×&×&〇 \\
〇&〇&〇&× \\
\hline\end{array}
$$
最後の行に注目すると、〇+〇=〇×、
つまり、電気が来てる + 電気が来てる = 電気が出る&電気が出ない
つまり、1+1=10
1+1=10・・・。でもこれの右側、「十(じゅう)」ではないんです。
十進数
10と書いて「じゅう」と読むのは、9の次、「じゅう」になるタイミングで二けた目が増えて初めて桁が上がっています。9までは一桁ですね。
0、1、2、3、4、5、6、7、8、9の文字、1~9までと0(ゼロ)があるから、数えると十文字ありますね。この十文字を使って、十(じゅう)になるタイミングで桁が上がるように書く記法のことを十進数と呼びましょうと、偉い人が遠い昔に決めたようです。
ま、人間の手の指は両手合わせて十本だから、十を一区切りとするのが都合よかったんでしょう。
人間の指だけで「じゅういち」、「じゅうに」の表現は、人によって違うかもしれません。十の位を指で表現する方法までは「十進数と呼びましょう」と決めた人もよく考えてなかったのかもしれない。
二進数
これまでずっと考えてきた電池から流れて来る電気、これは「電気が来てない」か「電気が来てる」か、この2パターンしかない。数字に置き換えればゼロか1ですね。ゼロは「電気が来てない」、1は「電気が来てる」ってことにしようってことでしたからね。
数字を表す文字が十進数みたいに十文字(0、1、2、3、・・・9)ない。
じゃあ、1の次の数は・・・2っていう文字を持たないので、どんな風に表現しよう?
ここで遠い昔の偉い人が「繰り上がっちゃえばいいか」と考えたようです。。
左に一桁増えて「10」ってことで。
これ、十進数と間違えちゃうといけないから「じゅう」と呼ばずに「イチ・ゼロ」って読みましょう。
これなら電気が来てる、電気が来てない、って2本の電線があれば表現できる。
その次の数は一の位に1増えるので「11」、これは「じゅういち」ではなくて「イチ・イチ」。じゃあその次は?
一の位はすでにある1に1を足すので左に繰り上がることにして、一の位は0(ゼロ)に戻ることにする。
左の位はすでにある1と、繰り上がってきた1を足すので、やっぱりここでも左に繰り上がることにして、ひとまずこの桁は0(ゼロ)に戻る。
最終的に一番左に一桁増やしてそこを1に・・・。
つまり「100」と書きましょう。あ、これは「百」と読んじゃうと十進数とごっちゃになっちゃうので「イチ・ゼロ・ゼロ」ね。
分かりますか?
2になるタイミングで繰り上がってしまおう!ってことです。これを二進数と呼びましょう。
あ、ちなみにこの二進数、英語だと「バイナリ」って言ったりします。コンピュータを学んでいくとよく聞く単語「バイナリ」。今後どこかで聞いたら二進数をイメージしてくださいね。
十進数と二進数の対応、お互いに変換できる
ということで、十進数と二進数、どちらも桁上がりのタイミングが違うだけで、ゼロの次の数、またその次の数、またその次の数・・・、これをどちらの表記法を使っても表現できるんです。
また得意の表にまとめますね。
$$
\begin{array}{|c|c|}\hline
十進数&二進数 \\ \hline\hline
0&0 \\
1&1 \\
2&10 \\
3&11 \\
4&100 \\
5&101 \\
6&110 \\
7&111 \\
8&1000 \\
9&1001 \\
10&1010 \\
11&1011 \\
12&1100 \\
・・・&・・・ \\
252&1111 1100 \\
253&1111 1101 \\
254&1111 1110 \\
255&1111 1111 \\
\hline\end{array}
$$
二進数が2になるタイミングで桁上がりしているのが分かるでしょうか。
一の位が0、1、0、1、0・・・と、0と1が交互に現れるんです。ゼロが現れるタイミングで桁上がりしています。
十進数で書いても二進数で書いても、結局表記法が違うだけで、実質的には同じものを表現しています。つまり、十進数を二進数に、二進数を十進数にお互いに変換可能ということです。
二進数で考えれば、電気が来ているか来てないかの2パターンしか持たない電気信号でも、無数の数が表せるようになりました。
・・・めちゃくちゃ桁が必要になりますけどね・・・。
つづく。
この記事が気に入ったらサポートをしてみませんか?