1. 基数と進数
1.1. 基数と進数制度
進数制度において、「基数」はその数制度の「基本となる数」をさします。この「基数」が、各桁での値の計算に用いられ、その進数制度の「精度」や「表現範囲」に影響を与えます。
例えば、10進数の場合、基数は 10 です。これは、各桁が10のべき乗であることを意味します。
10進数の \(356\) は \(3\times10^2+5\times10^1+6\times10^0\) と表されます。
2進数の場合は、基数は 2 になります。これは、各桁が2のべき乗であることを意味します。
ですので、2進数の \(1101\) は、\(1\times2^3+1\times2^2+0\times2^1+1\times2^0\) と表されます。
数字を表記した場合、何進数を使っているかわかりやすくするために、数字の後ろに下付文字をつけて表すことがあります。例えば10進数の \(356\) であれば \(356_{10}\) と表記します。2進数の \(1101\) は、\(1101_2\) と表記します。これによって、いろいろな進数表記が混在している場合、見分けやすくなります。
図1:位取り記数法の図解
1.2. 進数制度の例
進数制度は、数を表現するための方法の一つで、それぞれの進数制度は、その「基数」に基づいて数を表現します。以下にいくつかの進数制度の例を示します。
- 2進数(二進数制度): 2進数は、0と1の2つの数字だけを使って数を表現する方法です。2進数は、コンピュータの内部でデータを表現するための基本的な数制度です。コンピュータは、内部で2進数を使ってデータを処理するため、2進数に関連する知識は、情報処理技術者として非常に重要です。
- 10進数(十進数制度): 10進数は、0から9までの10個の数字を使って数を表現する方法です。我々が日常でよく使うこの数制度は、各桁が10のべき乗であるため、人間にとって直感的に理解しやすいです。
- 16進数(十六進数制度): 16進数は、0から9までの数字と、A(10)、B(11)、C(12)、D(13)、E(14)、F(15)の合計16個の記号を使う数の表記法です。16進数では、各桁の値は16のべき乗になります。
基数が大きいと、同じ桁数でより大きな数を表現できますが、その分、必要な記号(数字や文字)も増えます。16進数では0-9の数字に加えてA-Fの文字を使っています。
基数と進数制度は、数を表現するための基本的な概念であり、情報処理技術の基本知識として理解しておくことが重要です。
1.3. 進数の変換
普段の生活で用いられる10進数をコンピュータが処理するには2進数に変換する必要があります。また計算された2進数は人間が理解しやすいように10進数に変換されて表示されます。ここでどのような変換がおこなわれているか理解することでコンピュータの数値処理の特性をより深く理解できるようになります。
10進数の数を2進数に変換するには、その数を2で割った商と余りを求め、これを商が0になるまで繰り返し、得られた余りを逆順に並べることで、2進数の表現を得ることができます。
図2:10進数から2進数への変換アルゴリズム
例えば、上で示されているように10進数の45を2進数に変換する場合、以下の手順を繰り返します。
- 45を2で割った商とあまりを求めます。 45÷2=22あまり1
- 次に、商22を2で割った商とあまりを求めます。 22÷2=11あまり0
- 次に、商11を2で割った商とあまりを求めます。 11÷2=5あまり1
- 次に、商5を2で割った商とあまりを求めます。 5÷2=2あまり1
- 次に、商2を2で割った商とあまりを求めます。 2÷2=1あまり0
- 次に、商1を2で割った商とあまりを求めます。 1÷2=0あまり1
- これ以上割れなくなったら、あまりを逆順に並べます。1, 0, 1, 1, 0, 1
- これにより10進数の45は、2進数で101101と表されることになります。
このように、進数制度は、数を表現するための基本的な概念で、その「基数」は、その進数制度における各桁の値の基本となる数です。進数の変換は、情報処理の分野で非常に重要な技術であり、コンピュータの内部では、2進数が主に使われています。
2. 例題
例題1: 10進数から2進数への変換
10進数の45を2進数に変換してください。
45を2で割り、その商と余りを記録します。商が0になるまで繰り返し、余りを逆順に並べます。
割り算 | 商 | 余り |
---|---|---|
45 ÷ 2 | 22 | 1 |
22 ÷ 2 | 11 | 0 |
11 ÷ 2 | 5 | 1 |
5 ÷ 2 | 2 | 1 |
2 ÷ 2 | 1 | 0 |
1 ÷ 2 | 0 | 1 |
余りを下から上に並べると、45の2進数表記は101101となります。
例題2: 2進数から16進数への変換
2進数の11011110を16進数に変換してください。
2進数を右から4ビットずつ区切り、それぞれを16進数に変換します。
2進数 | 16進数 |
---|---|
1101 | D |
1110 | E |
したがって、1101 1110の16進数表記はDEとなります。
例題3: 16進数から10進数への変換
16進数の1A3
を10進数に変換してください。
各桁を16の累乗で重み付けして計算します。
1A3 = 1×16² + 10×16¹ + 3×16⁰ = 1×256 + 10×16 + 3×1 = 256 + 160 + 3 = 419
したがって、1A3の10進数表記は419となります。
3. 基数演算
3.1 2進数の加算
2進数の加算は以下のルールに従います:
- 0 + 0 = 0
- 0 + 1 = 1
- 1 + 0 = 1
- 1 + 1 = 10(桁上がり)
例:1101 + 1011
\[
\begin{array}{r}
1101\\
+\;1011\\
\hline
11000
\end{array}
\]
計算手順:
- 1 + 1 = 10 → 0を書いて1を繰り上げ
- 0 + 1 + 1(繰り上げ) = 10 → 0を書いて1を繰り上げ
- 1 + 0 + 1(繰り上げ) = 10 → 0を書いて1を繰り上げ
- 1 + 1 + 1(繰り上げ) = 11 → 1を書いて1を繰り上げ
- 繰り上がった1を最上位に書く
3.2 2進数の減算
2進数の減算は以下のルールに従います:
- 0 – 0 = 0
- 1 – 0 = 1
- 1 – 1 = 0
- 0 – 1 = 1(借り)
例:1101 – 1011
\[
\begin{array}{r}
1101\\
-\;1011\\
\hline
0010
\end{array}
\]
計算手順:
- 1 – 1 = 0
- 0 – 1 = 借りが必要 → 上位桁から1を借りて10 – 1 = 1
- 0(1を貸したので0) – 0 = 0
- 1 – 1 = 0
3.3 2進数の乗算
2進数の乗算も10進数と同様に行いますが、各桁の積は0か1のみになります:
- 0 × 0 = 0
- 0 × 1 = 0
- 1 × 0 = 0
- 1 × 1 = 1
例:101 × 11
\[
\begin{array}{r}
101\\
\times\;11\\
\hline
101\\
101\phantom{0}\\
\hline
1111
\end{array}
\]
3.4 2進数の除算
2進数の除算も10進数と同様のアルゴリズムで行います。
例:1100 ÷ 11
\[
\require{enclose}
\begin{array}{r}
\phantom{11}100 \\[-3pt]
11\enclose{longdiv}{1100}\\[-3pt]
\underline{11\phantom{00}}\\[-3pt]
\phantom{0}00\phantom{0}\\[-3pt]
\underline{\phantom{00}00}\\[-3pt]
\phantom{00}0
\end{array}
\]
結果:1100 ÷ 11 = 100(商), 0(余り)
3.5 コンピュータにおける2進数の表現
コンピュータでは、2進数を使って整数や実数を表現します:
- 符号付き整数:最上位ビットを符号ビットとして使用(0は正、1は負)
- 符号付き1バイト整数の範囲:-128〜127
- 符号付き2バイト整数の範囲:-32,768〜32,767
- 符号なし整数:すべてのビットを値として使用
- 符号なし1バイト整数の範囲:0〜255
- 符号なし2バイト整数の範囲:0〜65,535
- 浮動小数点数:IEEE 754形式
- 単精度浮動小数点数(32ビット):符号(1ビット) + 指数部(8ビット) + 仮数部(23ビット)
- 倍精度浮動小数点数(64ビット):符号(1ビット) + 指数部(11ビット) + 仮数部(52ビット)
4. 進数の実用的活用場面
4.1 情報処理における各進数の役割
16進数の活用
16進数は2進数データを簡潔に表現するのに適しています。1桁の16進数は4桁の2進数に対応します。例えば:
- メモリアドレス表現: 0x7FFFFFFF
- RGBカラーコード: #FF5500(赤: FF, 緑: 55, 青: 00)
- ネットワークのMACアドレス: 00:1A:2B:3C:4D:5E
8進数の活用
- UNIXシステムのファイル権限:chmod 755 file.txt(7=rwx, 5=r-x, 5=r-x)
2進数の活用
- ビット演算(AND, OR, XOR, シフト操作)
- ネットワークのサブネットマスク:11111111.11111111.11111111.00000000(255.255.255.0)
4.2 コンピュータアーキテクチャと基数の関係
現代のコンピュータは2進数を基本としていますが、内部処理では様々な基数が使われています:
- バイト単位処理:コンピュータはデータを8ビット(1バイト)単位で処理することが多く、これは256(2^8)種類の値を表現できます。
- ワード単位処理:CPUのレジスタサイズに応じて、16ビット、32ビット、64ビットの「ワード」単位で処理します。
- 浮動小数点演算:IEEE 754規格に基づき、2進数を使った浮動小数点表現を行います。
4.3 基数変換の実際の応用例
IPアドレスでの応用
IPアドレス 192.168.1.1
は実際には32ビットの2進数で表現され、内部的には10進数から2進数に変換されて扱われています:
\[
192 \to 1100 \phantom{0} 0000\\
168 \to 1010 \phantom{0} 1000\\
\phantom{00}1 \to 0000 \phantom{0} 0001\\
\phantom{00}1 \to 0000 \phantom{0} 0001\\
\]
連結すると:\(11000000\) \(10101000\) \(00000001\) \(00000001\)
コンピュータグラフィックスでの応用
画面の色は通常RGBの各色(赤、緑、青)を0〜255の値(8ビット)で表現しますが、HTMLやCSSでは16進数表記で記述します:
- 赤色(RGB: 255, 0, 0)\(\to\) #FF0000
- 黄色(RGB: 255, 255, 0)\(\to\) #FFFF00
4.4 コンピュータサイエンスにおける特殊な基数表現
2進化10進数(BCD: Binary-Coded Decimal)
10進数の各桁を4ビットの2進数で表します。例えば、10進数の 95
は:
\[
9 \to 1001\\
5 \to 0101\\
\]
BCDでは:1001 0101
このように表現することで、10進数での計算に近い形で演算処理を行うことができます。これは金融計算や時計表示など、正確な10進数表現が必要な場面で利用されます。
2の補数表現
負の整数を表現するためによく使われる方法です。符号ビットだけでなく、値そのものを2進数で表現して、コンピュータが効率的に演算できるようにします。
例えば、8ビットで -5 を表現する場合:
- 5の2進数表現:00000101
- ビット反転:11111010
- 1を加える:11111011
これにより、加算回路だけで減算も行えるという利点があります。