MENU

なぜコンピュータは2進数を使うのか

目次

はじめに: 2進数はコンピュータの「都合」から生まれた表現

私たちは普段、0から9までの数字を使う10進数で数を表しています。買い物の金額、時間、年齢、ファイルサイズなど、日常生活のほとんどは10進数で考えます。

一方で、コンピュータの世界では 01 を基本にした2進数が重要になります。基本情報技術者試験でも、2進数と10進数の変換、ビット、バイト、ビット演算などがよく出てきます。

ただ、ここで大事なのは、2進数を単なる変換問題として覚えないことです。コンピュータが2進数を使うのは、試験問題を難しくするためではありません。コンピュータの内部では、電気的な状態を安定して扱う必要があり、その都合に2進数が合っているからです。

2進数の考え方は、ビット演算、文字コード、画像データ、ファイルサイズ、HTTP通信、暗号などにもつながります。Webエンジニアとして普段コードを書くときに、2進数を直接書く場面は多くないかもしれません。それでも、仕組みを理解しておくと、文字化け、容量、通信、データ形式の話が少し読みやすくなります。

この記事では、変換方法そのものよりも、「なぜコンピュータは2進数を使うのか」に焦点を当てます。

2進数は、コンピュータが電気的な状態を安定して扱うための基本的な表現です。

コンピュータは電気のオン・オフを扱う

コンピュータは、内部で電気信号を使って情報を扱います。かなり単純化して言えば、電気が流れている状態、流れていない状態、あるいは電圧が高い状態、低い状態を区別して処理しています。

ここで、もしコンピュータが10進数のように0から9までの10段階を直接扱おうとすると、かなり細かい違いを正確に判定する必要があります。電気信号にはノイズやゆらぎがあります。0、1、2、3、4、5、6、7、8、9のように多くの段階を安定して区別するよりも、「低いか高いか」「オフかオンか」の2状態に分けるほうが扱いやすくなります。

この2つの状態を、記号として 01 で表します。つまり、2進数はコンピュータにとって自然な表現です。人間にとって10進数が数えやすいように、コンピュータにとっては0と1の2状態が扱いやすい、と考えると分かりやすいです。

たとえば、部屋の照明スイッチを考えると、オンとオフの2状態があります。スイッチ1つでは2通りしか表せませんが、スイッチを複数並べれば、表せる状態の数は増えていきます。コンピュータのビットも、これに近い考え方で理解できます。

コンピュータにとって、オンとオフの2状態は判定しやすく、安定して扱いやすい表現です。

0と1だけでも、組み合わせれば多くの情報を表せる

01 の2種類だけでは、あまり多くの情報を表せないように感じるかもしれません。しかし、ビット数を増やすと、表現できる組み合わせは一気に増えていきます。

1ビットなら、表せる状態は 01 の2通りです。2ビットなら 00011011 の4通りです。3ビットなら8通り、8ビットなら256通りになります。

JavaScriptで、ビット数と組み合わせの数を見てみます。

for (let bits = 1; bits <= 8; bits++) {
  console.log(`${bits}ビット: ${2 ** bits}通り`);
}

このコードでは、2 ** bits で「2のbits乗」を計算しています。1ビットなら 2 ** 1 で2通り、8ビットなら 2 ** 8 で256通りです。

コンピュータは、このようなビットの組み合わせを使って、数値だけでなく、文字、色、命令、ファイルの中身などを表します。0と1だけを見ると単純ですが、組み合わせることで多くの情報を扱えるようになります。

基本情報技術者試験でも、n ビットで 2^n 通りを表せるという考え方は重要です。2進数の変換だけでなく、情報量やデータ容量の理解にもつながります。

0と1の2状態だけでも、ビット数を増やせば表せる情報の種類は大きく増えていきます。

10進数と2進数は「同じ数の別表現」

2進数を学ぶときに混乱しやすいのが、「2進数になると別の数になる」と感じてしまうことです。しかし、10進数と2進数は、同じ値を別のルールで書いているだけです。

たとえば、10進数の 5 は、2進数では 101 と表せます。見た目は違いますが、表している値は同じです。人間が読みやすい書き方が10進数で、コンピュータが扱いやすい書き方が2進数だと考えるとよいでしょう。

JavaScriptでは、toString(2) を使うと、数値を2進数の文字列として表示できます。

const value = 5;

console.log(value.toString(2)); // 101
console.log(parseInt("101", 2)); // 5

value.toString(2) は、数値を2進数表記の文字列に変換します。反対に、parseInt("101", 2) は、2進数として書かれた文字列を10進数の数値として読み取ります。

ここで押さえたいのは、2進数は「別の世界の数字」ではないということです。同じ値を、10を基準にして書くか、2を基準にして書くかの違いです。

10進数と2進数は、違う値ではなく、同じ値を別のルールで書いた表現です。

文字や画像もビットで表される

コンピュータが扱うのは、数値だけではありません。私たちがブラウザで読んでいる文章、フォームに入力する文字、アップロードする画像、HTTPで送受信されるデータも、最終的にはビットの集まりとして扱われます。

たとえば、文字は文字コードによって数値に対応づけられます。文字そのものをコンピュータが直接理解しているのではなく、「この文字はこの番号」という対応表を使って扱っています。次の記事で扱う文字コードは、この考え方と深く関係しています。

画像も同じです。画像はピクセルという小さな点の集まりとして表せます。それぞれのピクセルが、赤、緑、青などの色の情報を持っています。その色の情報も、数値として表され、最終的にはビット列になります。

Webページも、HTMLやCSSやJavaScriptのテキストだけでなく、画像、フォント、JSON、Cookie、セッションIDなど、さまざまなデータを扱っています。見た目は文章や画像でも、コンピュータ内部では0と1の組み合わせとして保存・送信されています。

2進数は、数字の変換問題に閉じた話ではありません。文字コード、ファイルサイズ、画像容量、通信データを理解するための土台です。

文字や画像も、コンピュータ内部では数値に対応づけられ、最終的にはビット列として扱われます。

JavaScriptでビット列のイメージを見てみる

最後に、JavaScriptで数値をビット列として見るイメージを確認してみます。

const values = [1, 2, 5, 10, 255];

for (const value of values) {
  console.log(value.toString(2).padStart(8, "0"));
}

toString(2) は、数値を2進数の文字列にします。ただし、そのままだと 1"1"2"10" のように桁数がばらばらです。そこで padStart(8, "0") を使い、8桁になるように左側を 0 で埋めています。

出力は、次のような形になります。

00000001
00000010
00000101
00001010
11111111

このように見ると、数値がビットの並びとして表されているイメージをつかみやすくなります。

もちろん、JavaScriptで普段のWebアプリを書くときに、毎回このような2進数表記を見るわけではありません。それでも、ビット演算、フラグ管理、文字コード、データ容量などを理解するときには、この見方が役立ちます。

JavaScriptでも、数値を2進数の文字列として表示すると、ビット列のイメージを確認できます。

試験ではどう問われるか

基本情報技術者試験では、2進数そのものだけでなく、ビット数と表現できる情報量の関係が問われます。

たとえば、n ビットで何通りの情報を表せるか、8ビットで何通り表せるか、といった考え方です。ここでは 2^n 通りという関係が重要になります。1ビットなら2通り、2ビットなら4通り、8ビットなら256通りです。

64 128 256
512 1024 2048 4096 8192 16384 32768 65536
などの数値は見たことがあるのではないでしょうか?これもビットが関係しています。
昔のゲームの上限値は、このビットの制約を受けてました。

また、2進数から10進数への変換、10進数から2進数への変換もよく出てきます。これは、同じ値を別の表記で読めるかを確認する問題です。

さらに、2進数は補数、ビット演算、シフト演算、文字コード、データ容量の前提にもなります。最初は別々の単元に見えても、根本には「情報をビットで表す」という共通点があります。

試験対策としては、変換手順だけを覚えるのではなく、「なぜ2進数で表せるのか」「ビット数が増えると何通りになるのか」をセットで押さえておくと理解が安定します。

基本情報では、2進数そのものだけでなく、ビット数と表現できる情報量の関係も重要です。

実務ではどう使われるか

Webエンジニアが日常的に2進数を手で書く場面は、それほど多くありません。HTML、CSS、JavaScript、PHPを書いているときに、毎回 1010 のような表記を意識するわけではないでしょう。

しかし、2進数の知識は、実務のいろいろな場面の土台になります。

たとえば、文字化けを調べるときは、文字コードやエンコーディングの理解が必要になります。画像の容量を考えるときは、ピクセル数、色の情報、ファイルサイズが関係します。HTTP通信で送られるデータも、最終的にはバイト列として扱われます。

また、権限や設定をフラグとして管理する設計では、ビットの考え方が出てくることがあります。暗号やハッシュ、圧縮、ネットワーク通信を深く学ぶときにも、ビットやバイトの感覚は避けて通れません。

2進数は、実務で毎日直接書くものというより、仕組みを読むための基礎知識です。表面上は文字や画像やJSONに見えているものも、コンピュータ内部ではビット列として扱われている。この感覚があると、Web技術の理解が少しずつつながっていきます。

2進数の知識は、Web開発で扱う文字コード、画像、通信、ファイルサイズの理解につながります。

まとめ: 2進数はコンピュータが情報を扱うための土台

コンピュータが2進数を使うのは、0と1の2状態が電気的に扱いやすいからです。オンとオフ、高い電圧と低い電圧のように、2つの状態に分けることで、安定して情報を扱いやすくなります。

0と1だけでは少なく見えますが、ビット数を増やせば多くの情報を表せます。1ビットなら2通り、8ビットなら256通りです。こうしたビットの組み合わせによって、数値、文字、画像、通信データなどを表現できます。

基本情報技術者試験では、2進数の変換、ビット数と情報量、ビット演算などが問われます。実務では、文字コード、画像容量、ファイルサイズ、HTTP通信、暗号などを理解する土台になります。

2進数は、単なる試験用の暗記項目ではありません。コンピュータが情報を扱うための基本的な表現です。次に文字コードやデータ容量を学ぶときも、「最終的にはビット列として扱われている」という視点を持っておくと、理解しやすくなります。

2進数は、数字だけでなく、文字・画像・通信データをコンピュータが扱うための土台です。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

20代前半に、ゲームボーイアドバンス、ニンテンドーDS、Wii向けソフトの開発に携わりました。

その後、20代後半にかけては組み込み系エンジニアとして、主にサーバーソフトウェアの開発を経験。

30代からはWebエンジニアとして、さまざまなWebサービスの開発に携わってきました。

現在は40代となり、ゲーム開発、組み込み開発、Web開発で培った経験を活かしながら、技術をわかりやすく伝える活動にも取り組んでいます。

コメント

コメントする

CAPTCHA


目次