
こんにちは。iQeda [@iQeeeda] です。
これからコンピュータサイエンス (CS) の基礎を解説していこうと思います。
初回である今回は「10 進法」と「2 進法」について説明します!
目次
十進法とは

10 進法は我々が日常で使っている数字の表現方法です。
人間は十進法で PC に数字入力しますが、PC の内部処理では二進法に変換されています。
10 進法で表現される数字のことを「十進数」と言います。
使う数字は 10 種類
- 0
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
数字が 10 種類あるので大きい数字を表現しやすく、結果として桁数が少なくて済みます。
桁数が少ない方が人間にとってはいいですよね。
十進数の桁を右から数えると…
- 1 桁目は 1 の位を表す
- ※ 10 の 0 乗 は 1
- 2 桁目は 10 の位を表す
- ※ 10 の 1 乗 は 10
- 3 桁目は 100 の位を表す
- ※ 10 の 2 乗 は 100
- 4 桁目は 1000 の位を表す
- ※ 10 の 3 乗 は 1000
十進数を「乗数」で表現してみよう
十進数 2503 を「乗数」で表現してみましょう。
- 2503 (十進数) ※ 二進数で 100111000111
- 2 は 1000 の位
- 5 は 100 の位
- 0 は 10 の位
- 3 は 1 の位
- つまり 2503 は
(2 * 1000) + (5 * 100) + (0 * 10) + (3 * 1)と表現できます - 乗数を使うと
(2 * 10^3) + (5 * 10^2) + (0 * 10^1) + (3 * 10^0)とも表現できます- 乗数の
10の部分のことは「基数(きすう)」または「底(てい)」と言います - 乗数の
^3とかの部分は「指数」と言います
- 乗数の
- 10 進法の基数は
10で、各位は10^nとなります - 指数が
^3→^2→^1→^0とカウントダウンしていることに注目しましょう
二進法とは

2 進法は主に PC の処理で使われる数字の表現方法です。
PC の内部処理では二進法が使われますが、人間に数字を見せるときは十進法に変換しています。
2 進法で表現される数字のことを「二進数」と言います。
使う数字は 2 種類
- 0
- 1
数字が 2 種類しかないので見た目はシンプルですが、桁数が長くなります。
ですがパソコンの処理は早いので桁数が長くても問題ありません。
数字の「0」がスイッチ OFF で、「1」がスイッチ ON の回路のようなイメージです。
二進数の桁を右から数えると…
- 1 桁目は 1 の位を表す
- ※ 2 の 0 乗 は 1
- 2 桁目は 2 の位を表す
- ※ 2 の 1 乗 は 2
- 3 桁目は 4 の位を表す
- ※ 2 の 2 乗 は 4
- 4 桁目は 8 の位を表す
- ※ 2 の 3 乗 は 8
二進数を「乗数」で表現してみよう
二進数 1100 を「乗数」で表現してみましょう。
- 1100 (二進数) ※ 十進数で 12
- 1 は 8 の位
- 1 は 4 の位
- 0 は 2 の位
- 0 は 1 の位
- つまり 1100 は
(1 * 8) + (1 * 4) + (0 * 2) + (0 * 1)と表現できます - 乗数を使うと
(1 * 2^3) + (1 * 2^2) + (0 * 2^1) + (0 * 2^0)とも表現できます - 2 進法の基数は
2で、各位は2^nとなります - 指数が
^3→^2→^1→^0とカウントダウンしていることに注目しましょう
基数変換とは

十進数から二進数に変換する手順を説明します。
これは基数が 10 から 2 に変換されることを意味するので「基数変換」と呼ばれます。
十進数から二進数に変換する手順
十進数の数字をひたすら 2 で割っていき、余りを算出します。
※ どんな数字でも 2 で割ると余りは必ず「0」か「1」になります。
割り切れなくなったら、算出した余りを「逆から繋げる」と二進数になっています。
【例1】12 を二進数にする
「十進数」の 12 を「二進数」として表記してみましょう。
- 12 を 2 で割っていく
- 12 / 2 = 6 余り 0
- 6 / 2 = 3 余り 0
- 3 / 2 = 1 余り 1
- 1 / 2 = 0 余り 1
- 余りに注目すると、逆から「1100」と読むことができる。これが 二進数となる
【例2】1100 を十進数にする
二進数「1100」を乗数で表現して、計算すると十進数に戻せます。
// 答えは 12
(1 * 2^3) +
(1 * 2^2) +
(0 * 2^1) +
(0 * 2^0)
【問題1】2503 を二進数にする
「十進数」の 2503 を「二進数」として表記してみましょう。
- 2503 を 2 で割っていく
- 2502 / 2 = 1251 余り 1
- 1251 / 2 = 625 余り 1
- 625 / 2 = 312 余り 1
- 312 / 2 = 156 余り 0
- 156 / 2 = 78 余り 0
- 78 / 2 = 39 余り 0
- 39 / 2 = 19 余り 1
- 19 / 2 = 9 余り 1
- 9 / 2 = 4 余り 1
- 4 / 2 = 2 余り 0
- 2 / 2 = 1 余り 0
- 1 / 2 = 0 余り 1
- 余りに注目すると、逆から「100111000111」と読むことができる。これが二進数となる
【問題2】100111000111 を十進数にする
二進数「100111000111」を乗数で表現して、計算すると十進数に戻せます。
// 答えは 2503
(1 * 2^11) +
(0 * 2^10) +
(0 * 2^9) +
(1 * 2^8) +
(1 * 2^7) +
(1 * 2^6) +
(0 * 2^5) +
(0 * 2^4) +
(0 * 2^3) +
(1 * 2^2) +
(1 * 2^1) +
(1 * 2^0)
位取り記数法とは
10 進法、2 進法などを総称して「位取り記数法 (くらいどりきすうほう)」と言います。
各位の大きさを 10^n や 2^n と表せるのが特徴です。
例えば 1000000000 と 1000000000 では、どちらが大きい数字か一目でわかりにくいですが、10^10 と 10^11 という指数表現では、後者が大きい数字であることが明らかで便利です。
an,an-1,an-2, … ,a2,a1,a0- ある数字の各位を上から並べた場合、このように表現できます
an * 10^n,an-1 * 10^n-1,an-2 * 10^n-2, … ,a2 * 10^2,a1 * 10^1,a0 * 10^0- それに 10 進法の位取り記数法を使った場合、このように変換できます
- 各位を公式化すると ak * 10^k と表現できます (添字 k と指数 k が一致する)
ちょっと分かりにくいので、例を掲載しておきます。
- 2503 の各位を 10 進法で表現するためには…
- n = 3
- a3 = 2
- a2 = 5
- a1 = 0
- a0 = 3
(2 * 10^3) + (5 * 10^2) + (0 * 10^1) + (3 * 10^0)
二進法・十進法以外の基数法
8 進法
使う数字は 8 種類
- 0
- 1
- 2
- 3
- 4
- 5
- 6
- 7
基数は 8
数字は 1 桁目から 8^0 → 8^1 → 8^2 → 8^3 …と表します。
16 進法
使う数字は 16 種類
- 0
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- A または a
- B または b
- C または c
- D または d
- E または e
- F または f
基数は 16
数字は 1 桁目から 16^0 → 16^1 → 16^2 → 16^3 …と表します。
N 進法
使う数字は N 種類
- 0
- 1
- 2
- 3
- (省略)
- N-1
基数は N
数字は 1 桁目から N^0 → N^1 → N^2 → N^3 …と表します。
数字の表現方法
- たとえば a3a2a1a0 は「4桁」の数字として表現できます
- a0, a1, a2, a3 はそれぞれ「0 〜 N-1」のどれかを表します
(a3 * N^3) + (a2 * N^2) + (a1 * N^1) + (a0 * N^0)で計算すれば、十進数の値になります
2 で除算するのは「 1 回、右ビットシフトする」のと同じ
2 で除算するのは「二進数を 1 回、右ビットシフトする」のと同じです。
例えば 14 / 2 の答えは 7 ですが…
14 の二進数である 1110 を 1110 >> 1 すると 111 を得ることができます。
二進数 111 とは十進数 7 のことなので、除算の結果と一致します。
ビットが 1 つ増えたときの十進数
ある二進数の末尾にビットが 1 つ増える場合、(十進数 * 2) + 末尾に増えるビット で「ビットが 1 つ増えたときの十進数」を取得できます。
- 二進数「0」
(1 * 0)で十進数「0」を求めることが可能
- 二進数「1」
(1 * 1)で十進数「1」を求めることが可能
- 二進数「10」※ 二進数「1」の末尾にビット 0 を追加
(2 * 1) + (1 * 0)で十進数「2」を求めることが可能(1 * 2) + 0でも十進数「2」を求めることが可能
- 二進数「11」※ 二進数「1」の末尾にビット 1 を追加
(2 * 1) + (1 * 1)で十進数「3」を求めることが可能(1 * 2) + 1でも十進数「3」を求めることが可能
- 二進数「100」※ 二進数「10」の末尾にビット 0 を追加
(4 * 1) + (2 * 0) + (1 * 0)で十進数「4」を求めることが可能(2 * 2) + 0でも十進数「4」を求めることが可能
- 二進数「101」※ 二進数「10」の末尾にビット 1 を追加
(4 * 1) + (2 * 0) + (1 * 1)で十進数「5」を求めることが可能(2 * 2) + 1でも十進数「5」を求めることが可能
- 二進数「110」※ 二進数「11」の末尾にビット 0 を追加
(4 * 1) + (2 * 1) + (1 * 0)で十進数「6」を求めることが可能(3 * 2) + 0でも十進数「6」を求めることが可能
- 二進数「111」※ 二進数「11」の末尾にビット 1 を追加
(4 * 1) + (2 * 1) + (1 * 1)で十進数「7」を求めることが可能(3 * 2) + 1でも十進数「7」を求めることが可能
二進数と十進数の比較表
十進数の 100 まで対応する二進数を用意しました。
偶数を二進数で表現すると「最後のビットは 0 になる」、
奇数を二進数で表現すると「最後のビットは 1 になる」ことは知っておくといいと思います。
また二進数に「1」が 1 個しか含まれていないとき、十進数では 2 の累乗になっています。
| 二進数 | 十進数 | 備考 |
|---|---|---|
| 0 | 0 | 唯一、二進数の先頭ビットが 0 |
| 1 | 1 | 2^0 |
| 10 | 2 | 2^1 |
| 11 | 3 | |
| 100 | 4 | 2^2 |
| 101 | 5 | |
| 110 | 6 | |
| 111 | 7 | |
| 1000 | 8 | 2^3 |
| 1001 | 9 | |
| 1010 | 10 | |
| 1011 | 11 | |
| 1100 | 12 | |
| 1101 | 13 | |
| 1110 | 14 | |
| 1111 | 15 | |
| 10000 | 16 | 2^4 |
| 10001 | 17 | |
| 10010 | 18 | |
| 10011 | 19 | |
| 10100 | 20 | |
| 10101 | 21 | |
| 10110 | 22 | |
| 10111 | 23 | |
| 11000 | 24 | |
| 11001 | 25 | |
| 11010 | 26 | |
| 11011 | 27 | |
| 11100 | 28 | |
| 11101 | 29 | |
| 11110 | 30 | |
| 11111 | 31 | |
| 100000 | 32 | 2^5 |
| 100001 | 33 | |
| 100010 | 34 | |
| 100011 | 35 | |
| 100100 | 36 | |
| 100101 | 37 | |
| 100110 | 38 | |
| 100111 | 39 | |
| 101000 | 40 | |
| 101001 | 41 | |
| 101010 | 42 | |
| 101011 | 43 | |
| 101100 | 44 | |
| 101101 | 45 | |
| 101110 | 46 | |
| 101111 | 47 | |
| 110000 | 48 | |
| 110001 | 49 | |
| 110010 | 50 | |
| 110011 | 51 | |
| 110100 | 52 | |
| 110101 | 53 | |
| 110110 | 54 | |
| 110111 | 55 | |
| 111000 | 56 | |
| 111001 | 57 | |
| 111010 | 58 | |
| 111011 | 59 | |
| 111100 | 60 | |
| 111101 | 61 | |
| 111110 | 62 | |
| 111111 | 63 | |
| 1000000 | 64 | 2^6 |
| 1000001 | 65 | |
| 1000010 | 66 | |
| 1000011 | 67 | |
| 1000100 | 68 | |
| 1000101 | 69 | |
| 1000110 | 70 | |
| 1000111 | 71 | |
| 1001000 | 72 | |
| 1001001 | 73 | |
| 1001010 | 74 | |
| 1001011 | 75 | |
| 1001100 | 76 | |
| 1001101 | 77 | |
| 1001110 | 78 | |
| 1001111 | 79 | |
| 1010000 | 80 | |
| 1010001 | 81 | |
| 1010010 | 82 | |
| 1010011 | 83 | |
| 1010100 | 84 | |
| 1010101 | 85 | |
| 1010110 | 86 | |
| 1010111 | 87 | |
| 1011000 | 88 | |
| 1011001 | 89 | |
| 1011010 | 90 | |
| 1011011 | 91 | |
| 1011100 | 92 | |
| 1011101 | 93 | |
| 1011110 | 94 | |
| 1011111 | 95 | |
| 1100000 | 96 | |
| 1100001 | 97 | |
| 1100010 | 98 | |
| 1100011 | 99 | |
| 1100100 | 100 |
おすすめの本
今回の十進数・二進数だったり、必要な数学知識を学べる技術書を紹介しておきます。
やさしい日本語で書かれているのでオススメです。
CS シリーズ
次回
お仕事ください!
僕が代表を務める 株式会社 EeeeG では Web 制作・システム開発・マーケティング相談を行っています。 なにかお困りごとがあれば、Twitter DM や Web サイトからお気軽にご相談ください。
カテゴリ「CS」の最新記事

【ロードマップ】文系の元ラーメン屋が学んだコンピュータサイエンス
【データ構造】「木とグラフ・探索アルゴリズム」をわかりやすく解説
【データ構造】キューとスタックの使い方を解説!【実用例たっぷり】
【データ構造】連結リスト・ランナーテクニックを解説!【頻出問題】
【データ構造】面談対策!文字列・配列の問題解説【ハッシュテーブル】
TerraformによるLinodeインスタンス新規作成サンプル
【Fingerprint】CircleCIがSSHできない問題解決
【Laravel】セッションタイムアウト後のログイン処理で前回URLに遷移するバグ修正
M1 Mac(2021)でanyenv/phpenvの初期設定!
コメント