コンピュータの基礎とはなにか?

おはようございます。またはこんにちは。もしくはこんばんわ。マゲっちSCと申します。10月20日の朝を迎えました。最近急に冷えてきて秋を通り越して冬のような体感気温となっていますが、皆さんはいかがお過ごしですか?急激な気温の変化は意外と身体に負担とストレスを与えるものです。決して無理はしないように気をつけていきたいところですね。

さて、前回のブログではクライアントサーバシステムとP2P(ピアツーピア)通信についてそれぞれお話させていただきましたが、タイトルがおかしくなっていましたね。大変申し訳ございません。ほとんどのウェブサービスはクライアントサーバシステムで充分運用可能です。ですが場合によってはP2P通信のほうがいい場合もあります。では今回はそのクライアントやサーバとなるコンピュータそのものについてのお話です。

コンピュータとはなにか?

そもそもの話になりますが、コンピュータとはなんぞや?ということですね。私の書いたブログをお読みいただいていらっしゃればいくつかのハードウェアを組み合わせ他金属の塊にOSというソフトウェアを入れて何らかの命令を与えると、その命令に対して何らかの返答を行うというものです。とお答えいただけるかもしれません。もっとわかりやすくいうとコンピュータとは電子計算機です。つまり電気を通電させて何らかの命令(値)を入力すると何らかのお返事を返してくれますよ。というものです。コンピュータでは様々な情報をすべて2進数の0と1のみで判断しています。つまり与える命令もすべて0と1の組み合わせで入力されます。例えば私は今こうしてブログを記述していますが、キーボードから入力された文字はすべて0と1の組み合わせに変換されています。それをコンピュータ側で文字データであると判断し0と1の組み合わせを変換して文字コードにします。文字コード表から該当する文字を選択して画面に表示しています。マウスであればマウスの位置を現在の位置からどれだけ移動させたかを計算しマウスカーソルの位置を変更しています。マウスカーソルの位置は2進数、つまり0と1に変換され計算されます。マウスカーソルのある位置にアイコンがあれば、Windows10のPCであればアイコンの背景に薄く色を付けます。クリックすればアイコンを選択したとコンピュータに伝えることができますし、ダブルクリックすれば実行することができます。

コンピュータの基礎とは

コンピュータの祖先は簡単に言うと電卓です。電卓は数字の計算に特化したコンピュータです。コンピュータは基本的に電源を入れてもなにもない0の状態からスタートします。コンピュータがまだ開発されたばかりの頃はその結果を2つのランプで表示していました。ランプが全部消えている状態は0です。スイッチを押すと右のランプが光ります。この状態が1です。続いてもう1回スイッチを押します。すると右のランプが消えて左のランプが点灯します。この状態が2です。もう1度スイッチを押すと左右のランプが両方とも点灯します。この状態が3です。つまり2つのランプで0~3の4つの状態を表現できるわけです。このランプの数をもっと増やして8つのランプを使うと0~255までの数値をランプの点灯パターンで表現可能になります。このランプのことをコンピュータではビットと呼んでいます。コンピュータの黎明期では扱える情報はほとんどが英数字でした。英数字1文字分は8ビット、つまり1バイトで表現可能です。コンピュータへの入力は10進数を使って行いますが、実際には2進数へ変換されて計算され、また10進数に変換されて画面に表示されます。文字の場合は文字コードに従ってA~Zまでの文字が表示されます。日本語になるとさらに複雑な計算を行って、ひらがな・カタカナ・漢字を表現しています。ファミリーコンピュータは8ビット機なので販売された当初は文字によるメッセージは日本で売られるゲームであってもメッセージは英字と数字で表示されるのが普通でした。その後RPGなどでどうしても日本語を表示する必要があるものはひらがなやカタカナをその企業独自でデザインして、1バイトで無理やり日本語を表現していました。

2進数・10進数・16進数について

コンピュータを扱う場合、基本的にユーザは10進数を使用します。理由としてはわかりやすいからです。人間の世界では0から始まって9まで行くと次の数字からは1桁繰り上がって「10」と表現します。一方コンピュータの世界ではビット単位ですべてのデータを扱うため2進数を使います。先ほどのランプの例でお話しましたが、現在のコンピュータでもランプの点灯と消灯を電気的に行っており電流が流れたら1、電流が途切れたら0です。そのため自作PCをしたことがある方はおわかりだと思いますが、HDDやSSDにOSのデータがなにもない場合画面には基本的に何も表示されません。厳密に言うとBIOSまたはUEFIが表示されます。ファミリーコンピュータにカートリッジを挿入せずに電源を入れてもテレビに何も表示されないのと同じ状態になります。現在はファミリーコンピュータよりもプレイステーションのほうが馴染みがある方が増えてきていると思います。プレイステーションの本体にゲームソフトを入れずに起動すると画面にはシステムソフトの内容が表示されると思います。PS4以降はHDDやSSDがすでに入っていてその中にゲームのデータが入っていますが、その中でどのゲームを起動するか選んだり、ネットワークなどの設定をする画面のことですね。PCではその画面のことをBIOSやUEFIと呼んでいます。少し話がそれましたが、コンピュータは基本的に2進数、人間は基本的に10進数を使用します。しかし、世の中には16進数というものが存在しています。この16進数とは一体何者でしょうか?

16進数とはプログラミングで使用したり人が見てわかりやすくするためのものです。人が見てわかりやすいのは10進数ですが、コンピュータに司令を与えるプログラム内で2進数を使用すると「01101101」のような感じになります。実際のプログラム内ではコンピュータに与える数値をたくさん使用します。ですが2進数の場合は1の次の値を入力するとそこで一桁繰り上がります。つまり10進数の「2(二)」は2進数では「10(イチゼロ)」です。「01101101」を10進数変換すると「109」です。10進数では3ケタですみますが、2進数では確実に8ケタ使用します。ケタ数が多いと見づらいですし間違えやすくなります。そこで16進数の登場です。16進数とは0~15までの数値を1ケタで表現できます。ルールとしては0~9までは10進数と同じです。しかし10進数でいうところの「10(ジュウ)」は16進数では「A(エー)」で表現します。「11(ジュウイチ)」が「B(ビー)」、「12(ジュウニ)」が「C(シー)」、「13(ジュウサン)」が「D(ディーまたはデー)」、「14(ジュウシ)」が「E(イー)」、「15(ジュウゴ)」が「F(エフ)」となります。こうすることでケタ数を少なくして間違えることが少なくなるようにできます。先ほどの例を16進数に変換すると「6C(ロクシー)」となります。一見するとそう見えませんが、「01101101」も「109」も「6C」もまったく同じ数値を表現しています。16進数は主にHTML言語での色の指定やIPv6でのIPアドレスの表記に用いられています。2進数はコンピュータがわかりやすく、10進数は人がわかりやすく、16進数はコンピュータも人もわかりやすい表現方法というわけですね。

2進数と16進数への変換方法とは

では10進数をどうやって2進数や16進数へ変換していくのでしょう?では10進数の「77」を例にとって説明していきます。まず2進数のルールですが、1バイトが8ビットであるためビットを8つ用意します。次に一番右のビットからそれぞれのビットに重みを付けていきます。「128、64、32、16、8、4、2、1」ですね。今回は「77」ですので「64」のビットがONになることはもうおわかりいただけるかと思います。77にするには64に13を足す必要があります。この重みを見て13にするには「1」と「4」と「8」の部分をONにする必要があります。つまり「77」を2進数に変換するためには「64」「8」「4」「1」がONに、つまり1になっていて他は0であればいいというわけです。ですので「77」を2進数にすると「01001101」となります。では「77」を16進数へ変換するためにはどうすればいいのでしょうか?それには2進数を利用します。先ほどお話した2進数の右の4つのビットの重みを見てください。「8」「4」「2」「1」とあります。これを合計すると「15」です。10進数の「15」は16進数では「F」なのはもうおわかりいただけていると思います。つまり、ビットを4つごとに区切って10進数で合計値を算出します。その値を0~Fまでの数値に置き換えればいいのです。10進数の「77」は2進数では「01001101」なのでこれを4つごとに区切ります。すると「0100」と「1101」に分けることができます。「0100」は10進数変換すると「4」となり、「1101」は「13」ですから「D」ですね。というわけで10進数の「77」は16進数では「4D」となるわけです。10進数から16進数への変換はなかなか難しいですが、一度2進数へ変換することで簡単に16進数にすることができます。

まとめ

さて今回は主に数学的なお話となりました。次回は今回の続きをお話していきたいと思います。文系の方には少し頭が痛くなるようなお話だったかもしれません。ですが、2進数・10進数・16進数変換ができるようになるとなんだか楽しいですよ。普段見慣れている数字が表現方法を変えるだけで違う見え方をします。私自身ももともとは文系の人間です。ですがコンピュータの資格を取る上で必要な数学的な知識は2進数・10進数・16進数への変換と四則演算のルールくらいですね。四則演算とは掛け算とわり算を足し算や引き算よりも優先して計算するとか、()で囲まれた足し算引き算は、掛け算わり算よりも先に計算すると言うルールで小学校で習う内容です。そんなに難しい数学的な知識は必要ありません。それでは次回お話する内容ですが、コンピュータ黎明期の考え方と現在のコンピュータの考え方に違いはあるのかどうかという点でお話していきます。ご興味がありましたらまたお立ち寄りください。それでは失礼いたします。


この記事が気に入ったらサポートをしてみませんか?