「10進数」とは
10進数とは、0、1、2、3、4、5、6、7、8、9の10種類の数字を使って数を表す方法です。私たちが日常生活で普通に使っている数の表し方が10進数です。
例えば、
253
=2×100+5×10+3×1
=2×10²+5×10¹+3×10⁰
という数は、単に「2、5、3」という数字を並べたものではありません。それぞれの桁には、
という意味があります。
このように、数字が置かれた位置によってその数字の重みが決まる表現方法を位取り記数法といいます。
基数
何種類の数字を使って数を表すかを示す数を基数といいます。
10進数の基数は10であり、各桁の重みは右から順に、
10⁰、10¹、10²、10³、…
すなわち、
1、10、100、1000、…
となります。
コンピュータでは10進数以外に、2進数や16進数がよく使われます。
表記法と基数
| 表記法 | 基数 | 使用する数字 |
| 2進数 | 2 | 0、1 |
| 10進数 | 10 | 0~9 |
| 16進数 | 16 | 0~9、A、B、C、D、E、F |
16進数では、10以上を1文字で表すため、
A=10、B=11、C=12、D=13、E=14、F=15
とします。
基数をはっきりさせたい場合は、
1010₂、 1010₁₀、 1010₁₆
のように右下に基数を書きます。
同じ「1010」という数字列でも、基数が違えば表している値は異なります。
2進数を10進数に変換する
2進数では、各桁の重みは右から順に、
2⁰、2¹、2²、2³、…
すなわち、
1、2、4、8、16、32、64、128、…
となります。
例えば、
1010₂
では、
1×2³+0×2²+1×2¹+0×2⁰
なので、
8+2=10
となります。したがって、
1010₂=10₁₀
です。
2進数では、1になっている桁の重みだけを足すと考えると計算しやすくなります。
例えば、
110101₂
では、1になっているのは、
2⁵、2⁴、2²、2⁰
の桁なので、
32+16+4+1=53
となります。
したがって、
110101₂=53₁₀
です。
10進数を2進数に変換する
10進数の整数を2進数へ変換する基本的な方法は、2で繰り返し割り、そのときの余りを並べる方法です。
2進数で使う数字は0と1だけなので、整数を2で割ったときの余りも必ず0または1になります。この余りが2進数の各桁に対応します。
例えば、10進数の29を2進数に変換します。
29を2で割り、商と余りを求めます。
29÷2=14 余り1
次に、得られた商14をさらに2で割ります。
14÷2=7 余り0
同じ操作を、商が0になるまで繰り返します。
7÷2=3 余り1
3÷2=1 余り1
1÷2=0 余り1
これをまとめると、次のようになります。
29を2で割ったときの商と余り
| 計算 | 商 | 余り |
| 29÷2 | 14 | 1 |
| 14÷2 | 7 | 0 |
| 7÷2 | 3 | 1 |
| 3÷2 | 1 | 1 |
| 1÷2 | 0 | 1 |
ここで重要なのは、余りを求めた順ではなく、最後の余りから逆向きに読むことです。
下から上へ読むと、
11101
となるので、
29₁₀=11101₂
です。
なぜ余りを逆順に読むのかというと、最初に求めた余りは2進数の最も右の桁、つまり2⁰の位を表すからです。その次の余りが2¹の位、その次が2²の位というように、割り算を進めるにつれて上位の桁が求められていきます。
したがって、「2で割る→余りを記録する→商をさらに2で割る」を繰り返し、余りを下から上へ読むのが10進数から2進数への基本的な変換方法です。
別の考え方として、10進数を2の累乗の和に分解する方法もあります。
29なら、
29=16+8+4+1
=2⁴+2³+2²+2⁰
となります。
そこで、2⁴、2³、2²、2¹、2⁰の各桁について、使うところを1、使わないところを0とすると、
11101₂
となります。
同様に26なら、
26=16+8+2
=2⁴+2³+2¹
なので、
26₁₀=11010₂
となります。
16進数を10進数に変換する
16進数では、各桁の重みは右から順に、
16⁰、16¹、16²、…
すなわち、
1、16、256、…
となります。
例えば、
82₁₆
は、
8×16¹+2×16⁰
なので、
8×16+2=130
となります。
したがって、
82₁₆=130₁₀
です。
16進数ではA~Fも数字として扱うことに注意します。
例えば、
3C₁₆
ではCは10進数の12を表すため、
3×16+12=60
となります。
したがって、
3C₁₆=60₁₀
です。
10進数を16進数に変換する
10進数の整数を16進数へ変換するときも、2進数の場合と同じ考え方を使います。
16で繰り返し割り、そのときの余りを最後から逆向きに読む方法です。
例えば、10進数の475を16進数に変換します。
まず、475を16で割ります。
475÷16=29 余り11
次に、商29を16で割ります。
29÷16=1 余り13
さらに、商1を16で割ります。
1÷16=0 余り1
まとめると、次のようになります。
475を16で割ったときの商と余り
| 計算 | 商 | 余り |
| 475÷16 | 29 | 11 |
| 29÷16 | 1 | 13 |
| 1÷16 | 0 | 1 |
16進数では、一つの桁に0から15までの値を入れる必要があります。しかし、10~15については1文字の数字がないため、次のようにA~Fを使用します。
10=A、11=B、12=C、13=D、14=E、15=F
したがって、余り11はB、余り13はDに置き換えます。
求めた余りを下から上へ読むと、
1DB
となるので、
475₁₀=1DB₁₆
です。
つまり、10進数から16進数への変換では、
元の数を16で割る
商と余りを求める
商をさらに16で割る
商が0になるまで繰り返す
余りが10~15ならA~Fに置き換える
余りを最後から逆向きに読む
という手順を使います。
例えば、10進数の130を16進数に変換すると、
130÷16=8 余り2
8÷16=0 余り8
となるので、余りを下から読むと、
82₁₆
となります。
したがって、
130₁₀=82₁₆
です。
同じ数字列でも基数によって値が変わる
例えば「11」という数字列を考えます。
2進数の11なら、
11₂=1×2+1=3
10進数の11なら、
11₁₀=1×10+1=11
16進数の11なら、
11₁₆=1×16+1=17
となります。
つまり、
11₂=3₁₀、 11₁₀=11₁₀、 11₁₆=17₁₀
です。
数字列だけを見るのではなく、何進数として書かれているかを確認することが重要です。
小数にも位の重みがある
位取り記数法は整数部分だけでなく、小数部分にも使われます。
10進数では、小数点の右側は、
10⁻¹、10⁻²、10⁻³、…
すなわち、
1/10、1/100、1/1000、…
という重みをもちます。
例えば、
0.253₁₀
は、
2×1/10+5×1/100+3×1/1000
を意味します。
同じ考え方を2進数や16進数にも使えます。
2進小数を10進数に変換する
2進小数では、小数点の右側の重みは、
2⁻¹、2⁻²、2⁻³、2⁻⁴、…
すなわち、
1/2、1/4、1/8、1/16、…
となります。
例えば、
0.1011₂
なら、
1×1/2+0×1/4+1×1/8+1×1/16
なので、
1/2+1/8+1/16
=(8+2+1)/16
=11/16
=0.6875
となります。
したがって、
0.1011₂=0.6875₁₀
です。
また、
7/32
を2進数で表す場合は、
7/32
=4/32+2/32+1/32
=1/8+1/16+1/32
なので、
7/32=0.00111₂
となります。
16進小数を10進数に変換する
16進小数では、小数点の右側の重みは、
16⁻¹、16⁻²、16⁻³、…
すなわち、
1/16、1/256、1/4096、…
となります。
例えば、
0.248₁₆
は、
2×1/16+4×1/256+8×1/4096
を意味します。
計算すると、
2/16+4/256+8/4096
=64/512+8/512+1/512
=73/512
となります。
したがって、
0.248₁₆=73/512
です。
逆に、
1/32
を16進数で表すと、
1/32=8/256
です。
16進小数の第2位の重みは1/256なので、
1/32=0.08₁₆
となります。
10の補数
補数とは、ある決められた桁数の中で、ある数に加えると桁上がりしてちょうど基数の累乗になる数です。
例えば、1桁の7に対する10の補数は、
10−7=3
です。
実際、
7+3=10
となります。
3桁の265に対する10の補数は、
1000−265=735
です。
実際、
265+735=1000
となります。
補数を利用すると、引き算を足し算として処理することができます。
2の補数
コンピュータで負の整数を表す代表的な方法が2の補数表現です。
nビットの2の補数では、
−2ⁿ⁻¹~2ⁿ⁻¹−1
の整数を表せます。
例えば4ビットなら、
−8~7
を表すことができます。
正の数は通常の2進数と同じです。
一方、負の数を作るときは、
絶対値をnビットの2進数で表す
0と1をすべて反転する
1を加える
という手順を使います。
例えば10進数の−6を4ビットで表します。
まず6は、
0110
です。
0と1を反転すると、
1001
さらに1を加えると、
1010
となります。
したがって、
1010
は4ビットの2の補数表現では−6を表します。