6日でできる 新C言語入門|コンピュータはどう動くのか

コンピュータの中で起きていることが見えてくる。
0と1からはじまる、プログラミング理解の第一歩。

私たちが毎日使っているパソコン、スマートフォン、タブレット、家電製品の多くには、コンピュータの仕組みが組み込まれています。画面をタップするとアプリが開き、文字を入力すると画面に表示され、動画を再生すると映像と音が流れます。普段はあまり意識しませんが、その裏側では非常に多くの処理が高速に行われています。

プログラミングを学び始めると、最初は文法や命令の使い方に目が向きがちです。しかし、学習が進むにつれて、なぜこの値になるのか、なぜメモリを意識する必要があるのか、なぜデータ型によって扱える範囲が変わるのか、といった疑問が出てきます。

そのときに役立つのが、コンピュータの基本的な動き方のイメージです。コンピュータは魔法の箱ではなく、電気信号、数値、論理回路、記憶装置、CPUなどが組み合わさって動いています。特にC言語を学ぶ場合、メモリやビット、バイト、数値表現の理解はとても大切です。C言語はコンピュータの内部構造に近い位置で動作を考えられる言語なので、仕組みを知るほどプログラムの見え方も変わってきます。

この記事では、コンピュータがどのように情報を扱い、どのような考え方で計算や判断をしているのかを、やわらかく整理して解説します。具体的なサンプルプログラムは使わず、プログラミング学習の土台になる考え方を中心に見ていきます。

コンピュータは情報を数値として扱う装置

コンピュータの大きな特徴は、情報を数値として扱うことです。文章、画像、音声、動画、命令、設定情報など、見た目にはまったく違うものでも、コンピュータの内部ではすべて数値の集まりとして表現されています。

たとえば、画面に表示される文字も、画像の色も、音の波形も、内部では決められた形式に従って数値化されています。人間には文字や絵に見えていても、コンピュータにとってはデータの並びです。

このとき重要になるのが、デジタルという考え方です。コンピュータは、あいまいな量をそのまま扱うのではなく、決められた値の組み合わせとして情報を処理します。

アナログとデジタルの違い

アナログは、連続的に変化する量を表します。温度、時間、音の強さ、角度などは、なめらかに変化する値として考えることができます。たとえば水銀式の温度計やアナログ時計は、連続的な変化を見た目で表すものです。

一方、デジタルは値を区切って表します。コンピュータでは、基本的に0と1という2つの状態を使って情報を表現します。電気が流れている状態、流れていない状態、電圧が高い状態、低い状態といった物理的な違いを、0と1に対応させて扱います。

項目アナログデジタル
表現の考え方連続的に変化する量で表す決められた値の組み合わせで表す
値の特徴中間の値をなめらかに持てる0と1のように区切られた値を使う
アナログ時計、温度、音の波コンピュータ、デジタル時計、画像データ
コンピュータとの関係そのままでは扱いにくい内部処理に向いている

コンピュータは、情報を0と1の組み合わせに変換して扱います。この仕組みがあるからこそ、文字の保存、画像の表示、音声の再生、ネットワーク通信、プログラムの実行などが可能になります。

図:アナログ情報をデジタル情報へ変換

この図から分かること

この図から分かることは、現実世界の情報がそのままコンピュータに入るのではなく、コンピュータが扱いやすい形に変換されているという点です。私たちが見ている文字や画像も、内部では0と1をもとにしたデジタルデータとして処理されています。

0と1を扱う最小単位がビット

コンピュータ内部で使われる最小の情報単位がビットです。ビットは、0または1のどちらか一方を表します。たった2通りしか表せないため、一見すると非常に小さな情報に見えます。

しかし、ビットは組み合わせることで大きな力を持ちます。1ビットなら0か1の2通りですが、2ビットなら00、01、10、11の4通りを表せます。3ビットなら8通り、4ビットなら16通りというように、ビット数が増えるほど表現できる情報量は急激に増えていきます。

ビットとバイトの関係

コンピュータでは、8ビットを1つのまとまりとして扱うことが多く、この単位をバイトと呼びます。1バイトは8個の0と1で構成されるため、256通りの値を表現できます。

単位内容表現できる量のイメージ
1ビット0または1を表す2通り
2ビット2個のビットを組み合わせる4通り
4ビット4個のビットを組み合わせる16通り
1バイト8ビットをまとめた単位256通り
1KB1,024バイト小さなテキスト程度の容量
1MB1,024KB画像や文書でよく見る容量
1GB1,024MB動画やアプリでよく見る容量
1TB1,024GB大容量ストレージで使われる単位

ファイルサイズやメモリ容量で目にするKB、MB、GB、TBといった単位も、もとをたどればビットとバイトの考え方につながっています。

C言語では、変数の型によって使われるメモリ量が変わります。つまり、どのくらいのバイト数を使って値を保存するのかという考え方が重要になります。型のサイズや値の範囲を理解するためにも、ビットとバイトの感覚は欠かせません。

2進数はコンピュータの基本言語

人間は普段、10進数を使っています。0から9までの数字を使い、10になると桁が上がる仕組みです。これは日常生活にとてもなじみがあります。

一方、コンピュータは基本的に2進数を使います。2進数では、0と1だけを使い、2になると桁が上がります。人間から見ると少し分かりにくく感じますが、電気信号のオンとオフに対応させやすいため、コンピュータには非常に向いています。

10進数、2進数、16進数の関係

プログラミングでは、2進数だけでなく16進数もよく使われます。16進数は、0から9に加えてAからFまでの記号を使い、16になると桁が上がります。

16進数が便利なのは、4ビット分の情報を1桁で表せるからです。たとえば、2進数で1111は、16進数ではFになります。8ビットのデータなら、16進数2桁で表せるため、バイト単位のデータを読みやすく表現できます。

10進数2進数16進数
000000
100011
200102
300113
401004
501015
601106
701117
810008
910019
101010A
111011B
121100C
131101D
141110E
151111F

16進数は、メモリアドレス、色の表現、バイナリデータ、機械語に近い情報の確認などでよく登場します。特にC言語では、ビット演算やメモリの中身を考えるときに、2進数と16進数の理解が役立ちます。

コンピュータは論理で判断する

コンピュータは、感覚や直感で判断しているわけではありません。内部では、0と1を使った論理的な処理を積み重ねています。その基本になるのが論理演算です。

論理演算とは、真か偽、1か0のような値をもとに結果を決める計算のことです。代表的なものにAND、OR、NOTがあります。

AND、OR、NOTの基本

ANDは、両方の条件が1のときだけ1になります。
ORは、どちらか一方でも1であれば1になります。
NOTは、値を反転させます。0なら1、1なら0になります。

ABANDOR
0000
0101
1001
1111
ANOT A
01
10

このような単純な論理演算を組み合わせることで、コンピュータは複雑な判断や計算を行います。画面を表示する、ファイルを保存する、ネットワークに接続する、プログラムの条件分岐を処理する、といった動作も、根本的には0と1の判断の積み重ねです。

図:論理演算

この図から分かること

この図から分かることは、コンピュータの判断が小さな論理の組み合わせで成り立っているという点です。AND、OR、NOTはとても単純ですが、それらを大量に組み合わせることで、計算、比較、条件判断、制御などの複雑な処理につながります。

論理回路が計算の土台になる

論理演算を実際の電子回路として実現したものが論理回路です。コンピュータ内部には、0と1を扱うための回路が大量に組み込まれています。

CPUの中では、データを計算する回路、比較する回路、命令を解釈する回路、次に実行する処理を決める回路などが連携しています。これらは非常に高速に動作し、1秒間に膨大な回数の処理を行います。

人間から見ると、コンピュータは一瞬で複雑な作業をしているように見えます。しかし内部では、細かい処理を順番に実行し、それを高速に繰り返しています。

CPUは命令を取り出し、解釈し、実行する

コンピュータの中心的な部品がCPUです。CPUは、プログラムに書かれた命令をもとに処理を進めます。

CPUの基本的な動きは、命令を取り出す、命令を解釈する、命令を実行する、という流れで考えると分かりやすくなります。

処理の流れ内容
命令を取り出すメモリ上にある次の命令を読み込む
命令を解釈する何をすべき命令なのかを判断する
命令を実行する計算、比較、データ移動などを行う
結果を反映するレジスタやメモリに結果を保存する

この流れは非常に短い時間で繰り返されます。CPUは、プログラム全体を一気に理解して動くのではなく、細かい命令を次々と処理していきます。

C言語で書いた処理も、最終的にはCPUが理解できる命令の形に変換されます。人間が読みやすいC言語の記述と、CPUが実行する機械的な命令の間には、コンパイルという変換の過程があります。これにより、ソースコードはコンピュータが実行できる形になります。

メモリは作業場所として使われる

CPUだけでは、プログラムを実行し続けることはできません。処理中のデータや命令を置いておく作業場所が必要です。その役割を担うのがメモリです。

メモリには、実行中のプログラム、計算途中の値、変数の内容、関数呼び出しに関する情報などが置かれます。CPUはメモリから必要な情報を読み取り、処理した結果を再びメモリへ書き戻します。

C言語では、メモリの考え方が特に重要です。変数はメモリ上に領域を持ち、配列は連続した領域として扱われ、ポインタはメモリ上の場所を指し示します。サンプルプログラムを使わなくても、C言語を深く理解するためには、メモリが単なる保存場所ではなく、CPUが利用する作業領域であることを意識しておく必要があります。

コンピュータの処理は部品同士の連携で成り立つ

コンピュータは、CPUだけで動いているわけではありません。メモリ、ストレージ、入力装置、出力装置、バスなどが連携して動作します。

部品主な役割
CPU命令を解釈し、計算や制御を行う
メモリ実行中のデータや命令を一時的に保持する
ストレージファイルやプログラムを長期的に保存する
入力装置キーボード、マウス、センサーなどから情報を受け取る
出力装置画面、スピーカー、プリンターなどへ結果を出す
バス部品同士でデータをやり取りする通り道

たとえば、アプリを起動するときには、ストレージに保存されているプログラムがメモリへ読み込まれます。CPUはメモリ上の命令を順番に処理し、必要に応じて画面へ結果を表示します。キーボードやマウスからの入力も、コンピュータ内部でデータとして処理されます。

図:部品同士の連携

この図から分かること

この図から分かることは、コンピュータの動作が1つの部品だけで完結していないという点です。CPUが中心になって処理を進めますが、メモリやストレージ、入力装置、出力装置と連携することで、私たちが使えるコンピュータとして機能します。

集積回路の進化がコンピュータを小さく速くした

現在のコンピュータが小型で高性能なのは、電子部品の進化によるところが大きいです。初期のコンピュータでは真空管が使われていましたが、真空管は大きく、消費電力も多く、故障しやすいという課題がありました。

その後、トランジスタが登場し、コンピュータは小型化と高性能化へ進みました。さらに、複数の電子部品を1つの基板上にまとめるICが使われるようになり、より多くの回路を小さな面積に収められるようになりました。

現在では、LSIのような大規模集積回路によって、非常に多くの素子を小さなチップの中に組み込めるようになっています。CPUやメモリは、この集積技術の発展によって進化してきました。

世代主な素子特徴
第1世代真空管大型で消費電力が多く、故障しやすい
第2世代トランジスタ小型化し、信頼性と性能が向上した
第3世代IC複数の素子をまとめて集積できるようになった
第4世代LSI大量の素子を高密度に搭載できるようになった

この進化によって、かつては部屋いっぱいの大きさが必要だった計算機能が、今では手のひらサイズの端末にも収まるようになりました。コンピュータの進化は、単に処理速度が上がっただけではなく、部品の小型化、省電力化、高密度化によって支えられています。

プログラミング学習では内部のイメージが理解を助ける

プログラミングでは、命令を書けばコンピュータが動きます。しかし、その命令がどのように解釈され、どこにデータが置かれ、どのように処理されるのかを知っていると、理解の深さが大きく変わります。

特にC言語では、コンピュータの内部に近い考え方が多く登場します。ビット、バイト、メモリ、アドレス、データ型、配列、ポインタといった要素は、コンピュータがどのように情報を扱っているかと密接に関係しています。

たとえば、整数型の大きさを考えるときには、何バイト使うのか、何ビットで表現するのか、符号付きなのか符号なしなのかといった視点が必要になります。メモリ上のデータの並びを意識できるようになると、C言語の理解はより実践的になります。

また、コンピュータの内部ではすべてが0と1で表されているため、論理演算やビット演算の考え方も重要です。これらは最初は抽象的に感じるかもしれませんが、CPUや論理回路の仕組みと結びつけると、なぜそのような処理ができるのかが見えてきます。

0と1の世界を知ると、プログラムの動きが見えてくる

コンピュータは、デジタル回路を使って0と1を扱い、ビットやバイトを組み合わせて情報を表現します。そして、2進数や16進数を利用しながら、論理演算と論理回路によって計算や判断を行います。

CPUは命令を取り出し、解釈し、実行します。メモリはその作業場所となり、ストレージや入力装置、出力装置と連携することで、私たちが使うアプリやシステムが動きます。

こうした基本を知っておくと、プログラミングで出てくる多くの概念がつながって見えるようになります。C言語の学習では特に、コンピュータの内部構造を意識することが大きな助けになります。文法を覚えるだけでなく、コンピュータがどのように考え、どのようにデータを扱い、どのように命令を実行しているのかをイメージできるようになると、プログラムの理解は一段深まります。

次に学ぶと理解が深まるテーマ

コンピュータの基本的な動きが見えてきたら、次はCPU、メモリ、データ型、文字コード、コンパイル、OSの役割などを順番に学ぶと理解が広がります。

特にC言語では、変数がメモリ上にどのように置かれるのか、配列がどのように連続した領域として扱われるのか、ポインタがなぜアドレスを扱う仕組みなのかを学ぶと、言語仕様の意味がよりはっきりしてきます。

コンピュータの仕組みは、最初は難しく感じるかもしれません。しかし、0と1、ビットとバイト、論理演算、CPUとメモリという基本から順番に見ていけば、少しずつ全体像がつかめるようになります。プログラムを書く力を伸ばすためにも、内部の仕組みをイメージしながら学んでいきましょう。