ブログの説明

学校に通わないで学んだことを記しています。間違っているところが何かありましたらご指摘下さると幸いです。コメントに対する返信が遅れる可能性があります。その場合は申し訳ありません。

このブログではサイドバーに広告を表示しています。このブログ内の投稿記事を検索するには右上の拡大鏡のアイコンを、アーカイブやラベル付けから投稿記事を閲覧するには左上の三重線のアイコンをクリックして下さい。

数式の表示にはMathJaxを利用させていただいています。数式の表示のためにJavaScriptが有効である必要があります。そうでない場合、訳の分からないLatexのコードが表示されます。幾何学図形やチャートの表示にはHTML5 CanvasやGoogle Chartを使用しています。その表示のためにもJavaScriptが有効である必要があります。

2進数とその各桁の重み

2進法(2進位取り記法)

次のように、例えば1と0という2つの記号だけで数を表現する方法(記数法)を2進法(2進位取り記法)と呼ぶ。

0, 1, 10, 11, 100, 101, 110, 111, 1000, 1001, 1010, 1011, 1100, 1101, 1110, 1111, 10000, 10001, 10010, 10011, 10100, 10101, 10110, 10111, 11000, 11001, 11010, 11011, 11100, 11101, 11110, 11111, 100000, ...(,は区切りを、...は省略を意味する)

このように2進法を用いて表した数を2進数(binary number)と呼ぶ。10進法では1桁に0から9までの十の値を持つことができるが、2進法では1つの桁に0か1かの二つの値しか持つことができない。

10進法では、9の次が10、99の次が100、999の次が1000、9999の次が10000というふうにすべての桁が9の値で満たされるごとに桁数が増え、位が1桁上がってゆくが、2進法では、1の次が10、11の次が100、111の次が1000、1111の次が10000...というふうにすべての桁が1の値で満たされるごとに桁数が増え、位が1桁上がってゆく。このようにして桁数を増やしてゆく表記方法を位取り記数法と呼ぶ。

10進法の場合:

\[ \begin{eqnarray} &&9 \\ +&&1 \\ \hline &1&0 \end{eqnarray} \]

2進法の場合:

\[ \begin{eqnarray} &&1 \\ +&&1 \\ \hline &1&0 \end{eqnarray} \]

n進数のnとは、その数の1桁(1つの位)が持つことができる値とその値を表す記号の数を意味しており、これを基数と呼ぶ。数学ではとも言う。10進数では10、2進数では2が、それぞれその基数(または底)である。

2進数が10進数ではどの数に対応しているか、つまり2進数の数が10進数ではどの数と等しい関係にあるかを表にしてみた。

2進数と10進数の対応関係
2進数 10進数
0 0
1 1
10 2
11 3
100 4
101 5
110 6
111 7
1000 8
1001 9
1010 10
1011 11
1100 12
1101 13
1110 14
1111 15
10000 16
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
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
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
1100101 101
1100110 102
1100111 103
1101000 104
1101001 105
1101010 106
1101011 107
1101100 108
1101101 109
1101110 110
1101111 111
1110000 112
1110001 113
1110010 114
1110011 115
1110100 116
1110101 117
1110110 118
1110111 119
1111000 120
1111001 121
1111010 122
1111011 123
1111100 124
1111101 125
1111110 126
1111111 127
10000000 128

10進数の正の整数は、計算機やコンピュータの中では、上の表のように対応する2進数に変換されて扱われる。2進数での桁上がりは10進数では2, 4, 8, 16, 32, 64, 128のところで生じていることが、この表から分かる。これは直前の値のちょうど2倍になる数が並んだ等比数列である。

2進法におけるそれぞれの桁の重み(位)

n進数と10進数の対応関係を表すために桁の重みという概念がある。桁の重みは数学ではplace value(桁値または桁価)と呼ばれている。桁の重みは10進数で表される。桁の重みは次のように定義することができる。Wはある桁の重み、nはn進数のnを意味する基数、xはその桁が右端から何桁目かを表す自然数。指数においてxから1を引くのは、桁の数は実際には0から数えるからである。

\[ W = n^{x - 1} \]

このことは下のような表にしてみると直観的に分かりやすい。

2進数の整数100000と各桁の重み
各桁 1 0 0 0 0 0
重み \( 2^5 \) \( 2^4 \) \( 2^3 \) \( 2^2 \) \( 2^1 \) \( 2^0 \)
32 16 8 4 2 1

\( 2^0 = 1 \)で、\( 2^1 = 2 \)であることに要注意。右肩の上に小さな数字(指数)の乗った指数表記によって表される累乗は、本当は次のような数式を意味しているので、こうなる。要するに最初の1が省略されているわけである。乗法では1は他の数を変化させないので、この1を乗法の恒等元、すなわち単位元と呼ぶ。

\[ \begin{align} & 2^0 = 1 \\ & 2^1 = 1 \times 2 \\ & 2^2 = 1 \times 2 \times 2 \\ & 2^3 = 1 \times 2 \times 2 \times 2 \\ & 2^4 = 1 \times 2 \times 2 \times 2 \times 2 \\ & 2^5 = 1 \times 2 \times 2 \times 2 \times 2 \times 2 \end{align} \]

例えば2進数の整数1010110における下線部の桁は、右端から左へ数えて5桁目に位置しているので、2の「5マイナス1乗」すなわち2の4乗、 \[ \begin{align} 2^{5-1} &= 2^4 \\ &= 2 \times 2 \times 2 \times 2 \\ &= 4 \times 4 \\ &= 16 \end{align} \] と計算することができ、この桁は10進数として見ると16倍の重みを持っていると言うことができる。つまり、1010110(下線部の1)は2進数では10000のことであるが、10進数では\( 1 \times 16 = 16 \)に等しい。実際、2進数と10進数の対応表を見ると、2進数の10000が10進数では16に対応しているのが分かる。これは2進数の10000が10進数では16であることを示している。

2進数の整数10110011の下線部の桁は右端から左へ数えて7桁目にあるので、2の「7マイナス1乗」すなわち2の6乗、 \[ \begin{align} 2^{7-1} &= 2^6 \\ &= 2 \times 2 \times 2 \times 2 \times 2 \times 2 \\ &= 4 \times 4 \times 4 \\ &= 16 \times 4 \\ &= 10 \times 4 + 6 \times 4 \\ &= 40 + 24 \\ & = 40 + 20 + 4 \\ &= 60 + 4 \\ &= 64 \end{align} \] と計算することができ、この桁は64倍の重みを持っていることになる。つまり、10110011(下線部の0)は10進数で表すと\( 0 \times 64 = 0 \)を意味している。その位の値が0である場合、0を何倍しても0であることに変わりないので、どの位に位置していようとも0になる。ちなみに、実数の掛け算における0はすべての数を0へと吸収してしまうので吸収元と呼ばれている。

2進数の整数11101の下線部の1は右端から左へ数えて3桁目にあるので、2の「3マイナス1乗」すなわち2の2乗、 \[ \begin{align} 2^{3-1} &= 2^2 \\ &= 2 \times 2 \\ &= 4 \end{align} \] となり、この桁は4倍の重みを持っていることになる。つまり、この11101(下線部の1)は10進数では\( 1 \times 4 = 4 \)を意味している。一般に、2進数において右端から左へ数えてn桁目の数は\(2^{n-1}\)倍の桁の重みまたは位の重みを持っていると考えることができる。

2進数における負の整数での桁の重み

英語では負数をネガティブ・ナンバーと呼び、引き算の「引く」をマイナスと呼ぶので、ここではその呼び方に従っている。

例えばネガティブを意味する符号-が付けられた負の整数-11101の下線部の1は右端から左へ数えて4桁目にあるので、 \[ \begin{align} -\left(2^{4-1}\right) &= -\left(2^3\right) \\ &= -\left(2 \times 2 \times 2\right) \\ &= -\left(4 \times 2\right) \\ &= -8 \end{align} \] となり、-8倍の重みを持っていることが分かる。つまり、-11101(下線部の1)は10進数では\( 1 \times -8 = -8 \)を意味している。2進数-101110の下線部の0は右端から左へ5桁目に位置しているので、 \[ \begin{align} -\left(2^{5-1}\right) &= -\left(2^4\right) \\ &= -\left(2 \times 2 \times 2 \times 2\right) \\ &= -\left(4 \times 4\right) \\ &= -16 \end{align} \] となり、この桁は-16倍の重みを持っていることになる。つまり、-101110の下線部の0は10進数では\( 0 \times -16 = -0 = 0 \)を意味している。-0は0と等しいので0になる。

負(ネガティブ)の数の重みは\( -\left(2^{n-1}\right) \)であって\( \left(-2\right)^{n-1} \)ではないことに要注意。負(ネガティブ)の数でも正(ポジティブ)の数でも各桁の重みそのものが\( 2^{n-1} \)になる点は同じで、負の整数の場合には計算結果にネガティブ符号を後からくっつければよいだけである。

2進数における小数点以下での桁の重み

2進数の小数点以下の桁の重みはどうなるのだろうか。例えば、2進数11.00101の下線部の1は小数点から右へ数えて5桁目にあるので、 \[ \begin{align} 2^{-5} &= \dfrac{1}{2^5} \\ &= \dfrac{1}{2 \times 2 \times 2 \times 2 \times 2} \\ &= \dfrac{1}{4 \times 4 \times 2} \\ &= \dfrac{1}{4 \times 8} \\ &= \dfrac{1}{32} \\ \end{align} \] となり、\( \dfrac{1}{32}倍 \)の重みを持っていることになる。つまり、この2進数11.00101の下線部の1は: \[ \begin{align} 1 \times \dfrac{1}{32} &= \dfrac{1 \times 1}{1 \times 32} \\ &= \dfrac{1}{32} \end{align} \] を意味している。2進数0.1100110011の下線部の1は小数点から右へ数えて9桁目にあるので、 \[ \begin{align} 2^{-9} &= \dfrac{1}{2^9} \\ &= \dfrac{1}{2 \times 2 \times 2 \times 2 \times 2 \times 2 \times 2 \times 2 \times 2} \\ &= \dfrac{1}{512} \end{align} \] となり、\( \dfrac{1}{512}倍 \)の重みを持っていることになる。つまり、この2進数0.1100110011の下線部の1は: \[ \begin{align} 1 \times \dfrac{1}{512} &= \dfrac{1 \times 1}{1 \times 512} \\ &= \dfrac{1}{512} \end{align} \] を意味している。2の-n乗というのは2のn乗分の1のことを意味していて、2進数における小数点以下の各桁の重みは一般に、 \[2^{-n} = \dfrac{1}{2^n} \] という式によって表すことができる。

桁の重みは、その桁が右端から左へ何桁目であるかを数え、2進数なら2をその序数(~番目)の回数だけ倍にしてやることで求められる。小数点以下の場合には、小数点から右に何桁目であるかを数え、そのn桁目の回数だけ2進数の2を倍にすることで、その桁が持つ重みを求めることができる。

2進数の-111111と各桁の重み
各桁 -(1 1 1 1 1 1)
重み \( -(2^5) \) \( -(2^4) \) \( -(2^3) \) \( -(2^2) \) \( -(2^1) \) \( -(2^0) \)
-32 -16 -8 -4 -2 -1

2進数の小数1.11111と各桁(位)の重み
各桁 1. 1 1 1 1 1
重み \( 2^{-0} \) \( 2^{-1} \) \( 2^{-2} \) \( 2^{-3} \) \( 2^{-4} \) \( 2^{-5} \)
\( \dfrac{1}{2^0} \) \( \dfrac{1}{2^1} \) \( \dfrac{1}{2^2} \) \( \dfrac{1}{2^3} \) \( \dfrac{1}{2^4} \) \( \dfrac{1}{2^5} \)
\( \dfrac{1}{1} \) \( \dfrac{1}{2} \) \( \dfrac{1}{4} \) \( \dfrac{1}{8} \) \( \dfrac{1}{16} \) \( \dfrac{1}{32} \)
\( 0.5^0 \) \( 0.5^1 \) \( 0.5^2 \) \( 0.5^3 \) \( 0.5^4 \) \( 0.5^5 \)
1.0 0.5 0.25 0.125 0.0625 0.03125

小数点以下についても一目瞭然。小数点以上(小数点の左側)は右端と同じ意味であるが、あえて負の指数表記か分数か小数点付きで表してある。

\[ 2^{-0} = 2^0 = \dfrac{1}{2^0} = \dfrac{1}{1} = 1.0 = 1 \] 等式で結びつけてあるこれらの数は、表記が異なるだけで、その値としてはすべて等しい。

負(ネガティブ)の指数を持つ累乗は次のような数式を表している。要するに、分子を1、分母を\( 2^n \)とする分数、あるいは\( 0.5^n \)の小数を表している。 \[ \begin{align} 2^{-0} &= \frac{1}{2^0} = \dfrac{1}{1} \\ &= 0.5^0 = 1.0 \\ 2^{-1} &= \frac{1}{2^1} = \dfrac{1}{1 \times 2} \\ &= 0.5^1 = 0.5 \\ 2^{-2} &= \frac{1}{2^2} = \dfrac{1}{1 \times 2 \times 2} \\ &= 0.5^2 = 0.25 \\ 2^{-3} &= \frac{1}{2^3} = \dfrac{1}{1 \times 2 \times 2 \times 2} \\ &= 0.5^3 = 0.125 \\ 2^{-4} &= \frac{1}{2^4} = \dfrac{1}{1 \times 2 \times 2 \times 2 \times 2} \\ &= 0.5^4 = 0.0625 \\ 2^{-5} &= \frac{1}{2^5} = \dfrac{1}{1 \times 2 \times 2 \times 2 \times 2 \times 2} \\ &= 0.5^5 = 0.03125 \end{align} \]

それぞれの桁が持つ重みという概念は、それぞれの桁が持つ単位を意味する。それぞれの桁として記された数をその重みのぶんだけ掛ける(n倍にする)ことによってその各桁(位)の正しい値を弾き出すことができる。

まとめ

2進数の正(ポジティブ)の整数の各桁の重みは(nは右端から左へ数えてn桁目):
\[ = 2^{n-1} \]
2進数の負(ネガティブ)の整数の各行の重みは(nは右端から左へ数えてn桁目):
\[ = -\left(2^{n-1}\right) \]
2進数の正(ポジティブ)の小数点以下の各桁の重みは(nは小数点から数えてn桁目):
\[ = 2^{-n} = \dfrac{1}{2^n} \]
2進数の負(ネガティブ)の小数点以下の各桁の重みは(nは小数点から数えてn桁目):
\[ = -\left(2^{-n}\right) = -\left( \dfrac{1}{2^n}\right) \]

関連記事

コメント

このブログの人気の投稿

Visual Studio 2019にはC++のためのフォームデザイナーがない件

10の補数と9の補数と2の補数と1の補数

LibreOffice 6 Calcでフォーム(ダイアログ)を作成してマクロで表示