十進数とは、0, 1, 2, 3, 4, 5, 6, 7, 8, 9 の 10個 の keyword から成り立っています。
数学の不等号を用い、その大きさの関係を表すなら、
二進数とは 0, 1 の 2個の keyword から成り立っています。
数学の不等号を用い、その大きさの関係を表すなら、
さて、次の計算式に違和感や疑問を持たなければ、二進数を理解していると思います。
|
|
[十進数表記] |
[二進数表記] |
1 + 1 = 2 10 + 1 = 11 11 + 1 = 12 |
1 + 1 = 10 1010 + 1 = 1011 1011 + 1 = 1100 |
1 + 1 = 2 2 + 1 = 3 3 + 1 = 4 |
1 + 1 = 10 10 + 1 = 11 11 + 1 = 100 |
1(千の位) | 1000 = 1 × 1000 | 1 × 10の3乗 |
2(百の位) | 200 = 2 × 100 | 2 × 10の2乗 |
3(十の位) | 30 = 3 × 10 | 3 × 10の1乗 |
4(一の位) | 4 = 4 × 1 | 4 × 10の0乗 |
二進数表記(Keyword) | 1 | 0 | 1 | 0 |
公式に代入 | 1 × 2の3乗 | 0 × 2の2乗 | 1 × 2の1乗 | 0 × 2の0乗 |
十進数表記(Keyword) | 8 | 0 | 2 | 0 |
桁 | …… | 4 | 3 | 2 | 1 |
十進数表記 | …… | 10の3乗 | 10の2乗 | 10の1乗 | 10の0乗 |
二進数表記 | …… | 2の3乗 | 2の2乗 | 2の1乗 | 2の0乗 |
にするだけで、変換出来ます。
例題として十進数表記 50 という数値を二進数表記してみましょう。
まず、50より小さい 2 の乗数の一覧をつくります。
桁[目](bit[目]) | 7 | 6 | 5 | 4 | 3 | 2 | 1 |
大きさ |
2 の 6 乗 = 64 |
2 の 5 乗 = 32 |
2 の 4 乗 = 16 |
2 の 3 乗 = 8 |
2 の 2 乗 = 4 |
2 の 1 乗 = 2 |
2 の 0 乗 = 1 |
という関係ですから、表から 50 と同じか小さい数値の中で一番大きい数値は 32 になります。
ここが二進数表記の一番高い桁になります。
二進数で 32 は 6桁目ですので、この数値は 6 bit で表現できると判断できます。
引いたら6桁目は 1 に成ります。
そして残りは 18 という大きさを持っています。
次は 32 (6桁目)の次ですから、表から 16 (5桁目)です。
18 から 16 は引けるので、
となります。
引けたので5桁目は 1 に成ります。
そして残りは 2 という大きさを持っています。
次は 16(5桁目)の次ですから、表から 8(4桁目)です。
これは、2 に 8 の大きさは無いので引けません。
引けなかったので4桁目は 0 です。
次は 8(4桁目)の次ですから、表から 4(3桁目)です。
これは、2 に 4 の大きさは無いので引けません。
引けなかったので3桁目は 0 です。
次は 4(3桁目)の次ですから、表から 2(2桁目)です。
2 から 2 は引けるので、
となり、残りの大きさは 0 になったので、以降の桁は全部 0 になります。
これを表にしてみます。
桁[目](bit[目]) | 7 | 6 | 5 | 4 | 3 | 2 | 1 |
大きさ |
2 の 6 乗 = 64 |
2 の 5 乗 = 32 |
2 の 4 乗 = 16 |
2 の 3 乗 = 8 |
2 の 2 乗 = 4 |
2 の 1 乗 = 2 |
2 の 0 乗 = 1 |
二進数表記 | - | 1 | 1 | 0 | 0 | 1 | 0 |
bit に関係している言葉で byte があります。
これは
8 bit = 1 byte
という意味があります。
なので、16 bit は 2 byte とも言えます。
1MB とは 1 Mega byte を意味しています。
つまり 1 Mega byte は 8 Mega bit ともいえます。
記憶媒体などにも byte はよく使われます。
記憶媒体の、保存する内容はこの 0, 1 の二進数表記の内容です。
色々な index 情報をつけ、区切りなどを設け、0 と 1 を保存しています。
これを読み取り、その数値に意味をつけて computer 上で様々な表現を可能にしています。
なので、記憶容量とは、 0 と 1 の数をどれだけ並べて格納できるか。とも解釈できます。
十六進数とは 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F の 16個の keyword から成り立っています。
十進数で足りない 9 以上の数値には alphabet を順に採用しています。
数学の不等号を用い、その大きさの関係を表すなら、
という関係にあります。
そして、F の 1つ上の数値は、単体で表現出来ません。
つまり、繰り上がりを行い、 10 (ジュウ ではなく イチ・ゼロと読む)という表現になります。
一桁の数値を 0 から F までの16種類の数字を扱い表現する、それを十六進数といいます。
また十進数と十六進数は次の関係になっています。
十六進数表記 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F | 10 |
十進数表記 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 |
より、十六進数も
から計算できます。
十六進数表記 AF を十進数表記した場合、どうなるのか解いてみます。
十六進数表記(keyword) | A | F |
各桁の大きさ |
A × 16の1乗 [10 × 16の1乗] |
F × 15の0乗 [15 × 16の0乗] |
十進数表記(keyword) | 160 | 15 |
桁 | …… | 4 | 3 | 2 | 1 |
各桁の大きさ | …… |
16の3乗 = 4096 |
16の2乗 = 256 |
16の1乗 = 16 |
16の0乗 = 1 |
という方法を行っては駄目です。
二進数は、keyword は 0 か 1 しかありませんが、十六進数では 一桁の表現が 16 種類もあります。
0 (無い) のほかに 1 〜 F までの15種類があります。
この場合、(というか二進数以外)割り算を採用します。
つまり、
になります。
目的の数値 2,476 は、
ですから、2476 より小さい数値の中において、一番大きい数値は 256 になります。
この時点で、この数値は十六進数表記で3桁で表記出来ることが分かります。
3桁目の数値は9であり、残りまだ172の大きさを持っている事になります。
2桁目の 16 は 172 の余りより小さく条件を満たしているので、計算します。
2桁目の数値は10であり、十六進数表記なので、Aになります。
そして残りまだ、12 の大きさを持っている事になります。
1桁目の 1 は何を割ってもその数値なので、そのままが1桁目となります。
1桁目の数値は12であり、十六進数表記なので、Cになります。
よって、十進数表記 2,476 は十六進数表記 9AC となります。
桁[目] | 4 | 3 | 2 | 1 |
大きさ |
16 の 3 乗 = 4096 |
16 の 2 乗 = 256 |
16 の 1 乗 = 16 |
16 の 0 乗 = 1 |
十六進数表記 | - | 9 | A | C |
十六進数 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F |
二進数 | 0000 | 0001 | 0010 | 0011 | 0100 | 0101 | 0110 | 0111 | 1000 | 1001 | 1010 | 1011 | 1100 | 1101 | 1110 | 1111 |
十進数 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
という作業が必要になります。
例題として十六進数表記 BFD3 を二進数表記にします。
十六進数の B は十進数では 11 で、二進数表記で 1011 です。
十六進数の F は十進数では 15 で、二進数表記で 1111 です。
十六進数の D は十進数では 13 で、二進数表記で 1101 です。
十六進数の 3 は十進数では 3 で、二進数表記で 0011 です。
この時大切なのは、
というのが大切です。
この場合十六進数の 3 は二進数表記では 11 ですが、 0011 と表記します。
そして最後に桁の配置の順番通りに配置します。
それが十六進数から二進数に変換した表記になります。
よって、十六進数表記 BFD3 は二進数表記 1011111111010011 になります。
この場合は3つに分かれました。
この時点で、十六進数表記で3桁の数値で表記される事がわかります。
それぞれ次のようになります。
二進数表記 |
1110 | 1011 | 1010 |
十進数表記 |
8 + 4 + 2 = 14 | 8 + 2 + 1 = 11 | 8 + 2 = 10 |
十六進数表記 |
E | B | A |
何故、二進数の4桁で区切り計算すると十六進数に変換できるのか。
それは、 二進数の4桁つまりは、 4 bit で表現できる最小値と最大値に関係あります。
それは十六進数の理屈と同様、0〜15 までの値であるからです。
まず data には必ず size があります。
ここでは便利上 size の定義を数値の桁数に比例する事にします。
Complement による負数の表現方法には、この桁数に重要な point があります。
では例題にいきます。
十進数表記の -4 という数値を 3 桁(size)で表現したときの値を求めます。
10 の 3 乗 - 4 = 1000 - 4 = 996
よって 十進数表記の -4 を 3 桁(size)で表現したときの値は 996 です。
これが数値だけで minus を表現する方法です。
この桁(size)において 996 と -4 は同じ効果をもっています。
これから、それを解説していきます。
996 が -4 と等価な値になれる理由は 3 桁という size にあります。
十進数表記で 5 - 4 = 1 という計算が成り立ちますが、これをやってみましょう。
5 - 4 = 1
は computer では - 記号は扱えませんので、
( 5 ) + ( -4 ) = 1
として 5 という数値と -4 という数値を加算した結果が 1 という考え方にします。
-4 と 996 は等価ですので置き換えます。
5 + 996 = ?
これを計算すると
5 + 996 = 1001
となります。
しかし、ここに size over という事が関連します。
これは 3 桁の size ですから 4 桁目を保存できません。4 桁目は破棄されます。
5 + 996 = 001
よって
5 + 996 = 1
となり 5 + (-4) = 1 ですから 996 と -4 は等価になります。
つまり 3 桁(size)限定という条件であれば、これが成り立つわけです。
では十進数表記 5 - (-4) = 9 の場合はどうでしょうか。
これについてもやってみます。
5 -(-4)
は
5 - 996
ですから
5 + (-996)
となります。
十進数表記の -996 という数値を 3 桁(size)で表現したときの値を求めます。
10 の 3 乗 - 996 = 4
十進数表記の -996 を 3 桁(size)で表現したときの値は 4 です。
これより
5 + (-996) = 5 + 4 = 9
となります。
これによって全て plus の値で計算しても桁(size)で制限される限り数値だけで minus 値を表現できます。
つまりまとめると、996 は 4 の 3 桁の10 の complement(補数)であるといいます。
i の j 桁の k の complement を求めるには
k の j 乗 - i
で求められます。
1011 + 0001 = 1100
これが十進数表記 -4 に等価な値です。
検証してみましょう。
十進数表記 -4 に等価という事は十進数表記 5 を加算すると答えは 1 になるはずです。
十進数表記 5 は二進数表記 0101 です。
0101 + 1100 = 10001
5 bit 目は size over で破棄されますから、
0101 + 1100 = 0001
つまり
0101 + 1100 = 1
となり、表現できています。
二進数時における補数による負数表現の関係を表にまとめて見ます。
十進数表記[正の数] | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
二進数表記[正の数] | 0000 | 0001 | 0010 | 0011 | 0100 | 0101 | 0110 | 0111 | 1000 | 1001 | 1010 | 1011 | 1100 | 1101 | 1110 | 1111 |
二進数表記[負の数] | 0000 | 1111 | 1110 | 1101 | 1100 | 1011 | 1010 | 1001 | 1000 | 0111 | 0110 | 0101 | 0100 | 0011 | 0010 | 0001 |
十進数表記[負の数] | 0 | -1 | -2 | -3 | -4 | -5 | -6 | -7 | -8 | -9 | -10 | -11 | -12 | -13 | -14 | -15 |
十進数表記[正の数] | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
二進数表記[正の数] | 0000 | 0001 | 0010 | 0011 | 0100 | 0101 | 0110 | 0111 | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- |
二進数表記[負の数] | 0000 | 1111 | 1110 | 1101 | 1100 | 1011 | 1010 | 1001 | 1000 | ---- | ---- | ---- | ---- | ---- | ---- | ---- |
十進数表記[負の数] | 0 | -1 | -2 | -3 | -4 | -5 | -6 | -7 | -8 | -9 | -10 | -11 | -12 | -13 | -14 | -15 |
この結論は、仕組みと異なりおぼえておかなければなりません。
この法則は次の通りです。
n bit の領域で表す符号付の整数値は十進数表記 i 〜 -j までであるとすれば、
4 bit の場合
i = (2 の 4 乗) / 2 - 1 = 16 / 2 -1 = 8 - 1 = 7
j = (2 の 4 乗) / 2 = 16 / 2 = 8
7 〜 -8 までとなります。
8 bit [1 byte] の場合
i = (2 の 8 乗) / 2 - 1 = 256 / 2 -1 = 8 - 1 = 127
j = (2 の 8 乗) / 2 = 256 / 2 = 128
127 〜 -128 までとなります。
16bit [2 byte] の場合 32,767 〜 -32,768
32bit [4 byte] の場合 2,147,483,647 〜 -2,147,483,648
4 bit の場合
i = (2 の 4 乗) - 1 = 16 - 1 = 15
0 〜 15 までとなります。
8 bit [1 byte] の場合
i = (2 の 8 乗) - 1 = 256 - 1 = 255
0 〜 255 までとなります。
16bit [2 byte] の場合 0 〜 65,535
32bit [4 byte] の場合 0 〜 4,294,967,295