トラック1・📜プログラムとは何か

0と1ですべてを表す——2進数の入口

読む目安 約12分・ゴール:2進数の仕組みを理解し、簡単な2進数と10進数の相互変換ができる

アプリでこのトピックを学ぶ(無料・登録不要)

このトピックの要点

コンピュータは0と1しか扱えない、とよく言われます。なぜでしょうか。理由は身も蓋もありません。電気が流れているか、いないかの2状態しか、確実に見分けられないからです。

電圧が高い状態を1、低い状態を0とする。この2種類の記号だけで、数も文字も画像も音も表す。それがコンピュータの大前提です。この0か1かの1桁をビットと呼び、8ビットをまとめて1バイトと呼びます。

2しかない世界の数え方

私たちは10種類の数字(0〜9)を使うので、9の次で桁が上がって10になります。これが10進数です。コンピュータは2種類しか使えないので、1の次で桁が上がります。これが2進数です。

10進数の 0 1 2 3 4 5 6 7 8 は、2進数では順に 0 1 10 11 100 101 110 111 1000 となります。2進数の 10 は「イチ・ゼロ」と読みます。桁が上がるタイミングが違うだけで、考え方は10進数とまったく同じです。

2進数を10進数に直す

10進数の 345 が「100が3個、10が4個、1が5個」であるように、2進数も桁ごとの重みで考えます。2進数の重みは右から 1, 2, 4, 8, 16, 32, 64, 128 と倍々になります。

例えば 1011 なら、重みは左から 8, 4, 2, 1 なので

8×1 + 4×0 + 2×1 + 1×1 = 8 + 2 + 1 = 11

1が立っている桁の重みを足すだけです。慣れれば暗算できます。

ビット8・4・2・1。この4つの数を覚えるだけで、4桁の2進数はすぐ読めるようになるよ。

10進数を2進数に直す

逆向きは「大きい重みから引けるか試す」のが簡単です。13を2進数にしてみます。

答えは 1101 です。

足し算も同じようにできる

2進数でも筆算ができます。違いは 1 + 1 が2にならず、桁が上がって 10 になる点だけです。101 + 11 を計算してみましょう。右の桁から 1+1 で0を書いて1くり上がり、次の桁は 0+1+1 でまた0を書いて1くり上がり、最後は 1+1 で 10。答えは 1000、10進数の8です(5+3=8なので合っています)。CPUの中で毎秒何十億回も行われている足し算も、原理はこの筆算とまったく同じです。

数以外もすべて数字になる

文字も同じ仕組みで扱います。例えば A という文字には65という番号が割り当てられており、メモリの中では 01000001 として置かれています。色は赤・緑・青の強さを0〜255の数で、音は空気の振動の高さを数の列で表します。世界のすべてを数に置き換えるのがデジタルという考え方です。

1バイト(8ビット)で表せるのは 2の8乗=256通り。ここから「なぜ0〜255なのか」「なぜ数がある大きさを超えると壊れるのか」という話につながっていきます。第1部の型やオーバーフローの回で、この256という数字にまた出会います。

アプリでこのトピックを学ぶ(無料・登録不要)

確認問題

確認問題 1

2進数の 1011 を10進数に直すと、いくつになるでしょう。

  1. 1011
  2. 11
  3. 13
  4. 7
答えを見る

正解:B(11)

2進数の重みは右から 1, 2, 4, 8 です。1011 は左から 8×1 + 4×0 + 2×1 + 1×1 なので、8 + 2 + 1 = 11 になります。1が立っている桁の重みを足すだけ、と覚えてください。

確認問題 2

10進数の 13 を2進数で表すと、どうなるでしょう。

  1. 10011
  2. 1011
  3. 1101
  4. 1110
答えを見る

正解:C(1101)

大きい重みから引けるか試します。8は引ける→1(残り5)、4は引ける→1(残り1)、2は引けない→0(残り1)、1は引ける→1(残り0)。並べて 1101 です。1011 は11、1110 は14、10011 は19なので、いずれも誤りです。桁の並びを逆に書いてしまう間違いが多いので、必ず重みの大きい左側から確かめましょう。

「プログラムとは何か」の目次

  1. コンピュータは何をする機械か
  2. プログラムとは「手順書」である
  3. ソースコードから機械語へ——コンパイルの旅
  4. CPUとメモリの模式図
  5. 命令実行サイクル(Fetch-Decode-Execute)
  6. プログラミング言語の地図とCの位置
  7. なぜ最初にC言語なのか
  8. 0と1ですべてを表す——2進数の入口

もっと先へ:ポインタ・メモリ・ファイル入出力・セキュアコーディングを含む全26トラックと、段位検定・模試のフルセットは完全版に収録しています。

完全版の販売ページは準備中です。

ほかのトラック

📚 姉妹教材:手を動かして覚える Linux 教材 — Linuxとインフラの仕組みを地図で学ぶ

Web版