システムエンジニアやプログラマーを名乗っている人であれば、基礎的な内容です。分からないと言う人はエセエンジニアです。とっていも良いくらい基礎的な内容ですので、正しく理解しておく必要があります。情報処理試験でも頻出問題だと思います。
理解していなくてもプログラミングは実際できるでしょう。ただし、そんな人の書いたプログラムの信頼性はゼロですね。
スポンサーリンク
基数
あなたも管理人も日常使用している数値は10進数(decimal number)で表現されています。スーパーマーケットへ行って値札が16進数で書かれているなんていうことは、まずないでしょう。みんな混乱しちゃいますので。
10進数では、0~9の10種類が使用されています。2桁以上の10進数の各桁には、次のように回の桁から順に、100、101、102、103、104・・・のように重みがついています。
例えば765という数字は、765=7×102+6×101+5×100で表され、10進数の各桁の重みは10のべき乗で表現されます。このとき10を基数(radix)と言います。
2進数、8進数、16進数による数の表現
2進数(binary numeral)は、0と1の2種類の数を使用して表現する数値です。次の示すように、2進数の基数は2になります。なお、数が何進数であるかを表現するために括弧で括った右下の数字に基数を書いています。例えば(11)10は10進数の11を意味します。
下表に2進数、8進数、16進数のそれぞれの基数を使用してどのように重みが付いているかをまとめます。
2進数 | (1101)2 = 1×23+1×22+0×21+1×20 = (13)10 |
8進数 | (572)8 = 5×82+7×81+2×80 = (378)10 |
16進数 | (3E6)16 = 3×162+14×161+6×160 = (998)10 |
16進数の場合、数値の中にEが入っていることがわかります。16進数で数値を表す場合には16種類の文字が必要となりまので、足りない部分をA~Fの文字を使用して表現することになっています。
10進数での表現 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
16進数での表現 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F |
小数点を含む数値を10進数へ変換する
上記のとおり、2,8,16進数から10進数の変換は簡単に行うことができることがわかると思いますが、上記では小数点のがあった場合にどのように変換してよいかが具体的には示されていません。実は小数点の桁数が大きいほど、その重みは小さくなって例えば2進数の場合は、小数点第1位から順に、2-1、2-2、、2-3・・・のように整数部分と同じように計算することができます。桁数と重みの対応がわかるように下表にまとめます。
桁数 | 2進数 | 8進数 | 16進数 |
---|---|---|---|
・・ | ・・ | ・・ | ・・ |
小数第3位 | 2-3 = 1 / 8 | 8-3 = 1 / 512 | 16-3 = 1 / 4096 |
小数第2位 | 2-2 = 1 / 4 | 8-2 = 1 / 64 | 16-2 = 1 / 256 |
小数第1位 | 2-1 = 1 / 2 | 8-1 = 1 / 8 | 16-1 = 1 / 16 |
1桁 | 20 = 1 | 80 = 1 | 160 = 1 |
2桁 | 21 = 2 | 81 = 8 | 161 = 16 |
3桁 | 22 = 4 | 82 = 64 | 162 = 256 |
・・ | ・・ | ・・ | ・・ |
この基数を小数点の各桁へ掛けることで、小数点部分も10進数に変換することができます。
(1101.1)2 = 1×23+1×22+0×21+1×20+1×2-1 = (13.5)10
※ 2-1 = 1 / 2 = 0.5
ここでは、2,8,16進数から10進数への変換を取り上げましたが、7進数だろうと11進数だろうと同じように10進数に変換できます。なぜ、2,8,16進数を取り上げたかと言いますと、情報処理の世界ではこれらが色々な部分で使用されているためです。管理人はなんちゃって情報処理技術者です。