D-solo

ホワイト企業を一年でやめて自由に生きる人の日記。データサイエンスを愛し、生き方にこだわっています。

【研究者が解説】なぜ0と1でコンピュータが動くのか?

こんにちは、d-soloです。みなさんはコンピュータとは何かと聞かれたら、意外と答えづらいのではないでしょうか?パソコンやスマホは毎日使っているが、0と1の世界からなぜこんなにも高度なことができるのか不明なのではないでしょうか?この記事では少しでもわかった気になれるように噛み砕いて説明したいと思います。本質的に理解しようと思うと大学の講義を一年取らないと厳しいと思うので、雰囲気だけでいきたいと思います。
まずデータはどのように0と1から表現できるのかを説明します。次にCPUを使った処理とは、何をしているのか述べて、最後に記事のまとめを話します。では、いきましょう。

0と1だけ? いやそれで十分

結論を先に言ってしまうと、読み方のルールさえ決めてしまえば0と1の表現力は他のすべての文字を使った場合と変わりません。まず、0と1だけを使う理由から話します。これはコンピュータが電気回路を用いることに起因しています。電気が流れるところは1、電気が流れないところは0、を意味します。みなさん、なんとなく知っているところだと思います。次に表現力についてです。2進数という言葉をご存知でしょうか。そんなに深く話さないので“2進数”という言葉に怯えないでください。。。私たちが普段使っているのは10進数(0,1,2,...,9)で、10数えたら繰り上がりという方式です。なので、10進数と2進数の対応関係を書くと、

10進数→2進数

   0→0
   1→1
   2→10
   3→11
   4→100
   ...
  20→10100
といったように使う数字が少ないので桁数はどんどん増えていきますが、どんな10進数の数字も2進数で表現できます。アルファベットの文字列も同じ理屈で説明できます。26文字ありますので、2進数を5桁(2の5乗=32通り)で表現できます。

アルファベット→2進数

   A→00000
   B→00001
   ...
   Z→11001
つまり、2進数を5文字ずつ読めば、アルファベットを完全に表現できます。とても単純なケースですが、0と1で十分なのはわかっていただけたでしょうか?

<余談>

0と1の話とバイトの関係性を簡単に説明しておきます。情報系の単位として、まず0と1を一つ保存できるものを1bit と言います。3bit なら001や101などです。これを塊にして8bit を1byte と呼びます。byte(バイト)は聞いたことがあるのではないでしょうか。これが10億個集まると G byte(ギガバイトとなるわけで身近な響きになるのではないでしょうか。

私たちの脳というか体も電気信号によって、細胞が反応することの組み合わせによって成り立っています。これは細胞レベルでシミュレートできるようになれば、生き物自体も電子的に再現できそうに思ってしまいます(現状、まだまだ難しそうですが)。


コンピュータ内の処理はどのように実行されているのか?

結論、足し算や読み出し書き込みなどの簡単な命令を、何十億と重ね合わせて実行されています。コンピュータで脳の役割を果たす CPU はみなさんご存知だと思います。コンピュータでは CPU に等間隔に命令が入力され、その間隔をクロックと呼び1秒間に何十億という命令が読み込まれます

マウスを動かしたときの例

例えばマウスの移動を考えると、マウスのセンサーがあなたが動かした分の数値をコンピュータに送信します。すると CPU の付近に現状のマウスカーソルの位置とマウスが動いた差分が読み出されて、足し算が実行されます。そして、結果をマウスカーソルの値として、新しく書き込みます。その後、あなたが見ている画面にマウスカーソルの位置として反映されます(非常に高速なので通常時は遅れを感じることは難しいでしょう)。

クリックしたときの例

直感的すぎて疑問を持つことはないかもしれませんが、クリックについても同様で、何かページを開く場合も現在マウスがある位置に割り当てられた URL が読み込まれ、コンピュータの内部では open コマンドが叩かれています。このように巧妙に動作を人間側に寄せることによって、簡単に、単純に誰でもコンピュータが使えるように設計されているわけです。

OSとは

この辺りの基本的な機能や、ハードとソフトを繋ぐ部分を提供するのが OS(オペレーティング・システム)の仕事になります(本当はもっとたくさん仕事がありますが、、、)。
OS の例は windowsMacOSスマホでいうとAndroidiOS が有名どころでしょう。アプリ等はこの OS の上で動くので、アプリ開発者は OS にさえ対応しておけば、個別の端末・ハードについては OS を通りして操ることができるので、非常に開発が楽になります。CPU への基本的命令は種類が少ないので、数桁の0と1で表現できます。また、読み出し・書き出し場所も当然0と1で表現できます。

最後に

このようにして、0と1からデータの保存も処理も実行できることをみてきました。共通して言えることは0と1を読むためのルールを整備することによって、0と1の列は意味を為し、どんな数字でも文字でも、画像でも動画でも表現できるようになります。
小さな論理の組み合わせで、夢のような機能が実現されていることをわかっていただければ、d-soloとしては非常にうれしいです。