こんにちは。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」の最新記事
コメント