32や256という数字を扱う際には一般的に10進数を利用します。
しかし、プログラムなどのIT技術を学習すると2進数や16進数などで数字を扱うこともあります。
今回は進数についての説明と考え方の紹介です。長文です。
もくじ
進数とは
進数とは「進む数」と書きます。進数の種類は、2進数、8進数、10進数、16進数が代表的です。進数の前の数字は桁が進む数を表しています。
2進数は2で桁が上がり、16進数だと16で桁が上がります。
桁上がりと進数
普段利用している10進数で考えてみます。
「0 1 2 3 4 5 6 7 8 9」 までの10種類の数字を使い1つの桁を表します。9の次は10となり2桁で表現します。
次は2進数で考えます。
「0 1」の2種類の数字を使い1つの桁を表します。1の次は10となり2桁で表現されます。「2進数での10(イチゼロ)」は「10進数の2」と同様になります。
下記は2進数と10進数の対応表です。
10進数 | 2進数 |
---|---|
0 | 0 |
1 | 1 |
2 | 10 |
3 | 11 |
4 | 100 |
5 | 101 |
6 | 110 |
7 | 111 |
8 | 1000 |
9 | 1001 |
10 | 1010 |
11 | 1011 |
12 | 1100 |
13 | 1101 |
補足
8進数だと「0 1 2 3 4 5 6 7」の8種類の数字を使い1つの桁を表します。7の次は10となり2桁で表現されます。
16進数だと「0 1 2 3 4 5 6 7 8 9 a b c d e f」の10種類の数字と6種類の記号を使い1つの桁を表します。fの次は10となり2桁で表現されます。つまり16進数の10は2進数の16になります。
桁の考え方
10進数では163はヒャクロクジュウサンと表現します。桁は位(くらい)でも表現ができ、以下の考え方で表現されます。
100の位 | 10の位 | 1の位 |
---|---|---|
1 | 6 | 3 |
10進数では桁が上がるごとに位が10倍ずつされていきます。位ごとに数字を分解して考えると、以下のように表すことができます。
位 | 位ごとの数字 |
---|---|
100 | 1 x 100 |
10 | 6 x 10 |
1 | 3 x 1 |
この位ごとの数字を全て足すと「100+60+3=163」となります。当たり前のように感じるかもしれませんが、この考え方を2進数に応用すると以下のようになります。
続いては2進数での1101(イチイチゼロイチ)で考えてみます。表中の位は10進数をもとに表記しています。
8の位 | 4の位 | 2の位 | 1の位 |
---|---|---|---|
1 | 1 | 0 | 1 |
2進数では桁が上がるごとに位が2倍ずつされていきます。位ごとに数字を分解して考えると、以下のように表すことができます。
位 | 位ごとの数字 |
---|---|
8 | 1 x 8 |
4 | 1 x 4 |
2 | 0 x 2 |
1 | 1 x 1 |
この位ごとの数字を全て足すと「8+4+0+1=13」となり、2進数の「1101」は10進数の「13」となります。
10進数の場合、普段使い慣れているため意識しなくてもいいですが、2進数や8進数を10進数と対応して扱うには位が重要です。
例えば2進数の「1101111」を10進数に変換する場合は「桁と位」を考えると、比較的わかりやすく変換できます。
2進数では桁が増えていく毎に位取りは2倍ずつになるため、以下の表が考えられます。以下の表は9桁までしかありませんが、10桁目は256の2倍で512の位となります。
桁 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 |
---|---|---|---|---|---|---|---|---|---|
位 | 256 | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
位と2進数の数値「1101111」を対応させた表は以下の通りです。
64の位 | 32の位 | 16の位 | 8の位 | 4の位 | 2の位 | 1の位 |
---|---|---|---|---|---|---|
1 | 1 | 0 | 1 | 1 | 1 | 1 |
○の位の○部分と対応する2進数の数値を掛け算すると、その桁の10進数がわかります。
64の位は1なので、64×1=64になります。
32の位は1なので、32×1=32になります。
16の位は0なので、16×0=0になります。
8の位は1なので、8×1=8になります。
4の位は1なので、4×1=4になります。
2の位は1なので、2×1=2になります。
1の位は1なので、1×1=1になります。
上記の全ての位を足し算することで10進数に変換できます。
64 + 32 + 0 + 8 + 4 + 2 + 1 = 111
n進数から10進数へ変換する
前述しましたが、n進数から10進数へ変換する際には、「桁と位」が重要です。
2進数から10進数へ変換
2進数の場合は位が2倍ずつで増えていくため、以下のような適当な表を作ります。今回は6桁で表を作成しました。
□ | □ | □ | □ | □ | □ |
□ | □ | □ | □ | □ | □ |
次に右から順に最初のみ1、そして左に2倍ずつ増えていく位(2、4、8、、、)を書いていきます。
← 右から2倍ずつ(一番右のみ1)
32 | 16 | 8 | 4 | 2 | 1 |
□ | □ | □ | □ | □ | □ |
次に2進数の数字を位の下に埋めていきます。例えば1101の場合は以下の通りです。
32 | 16 | 8 | 4 | 2 | 1 |
1 | 1 | 0 | 1 |
後は位の2進数の部分で1になっている部分の位を足し算していくだけです。今回は8と4と1を足し算した結果(13)が10進数に変換した数値となります。
32 | 16 | 8 | 4 | 2 | 1 |
1 | 1 | 0 | 1 |
8進数から10進数への変換
8進数だと位が8倍ずつなので、以下のようになります。
← 右から8倍ずつ(一番右のみ1)
32768 | 4096 | 512 | 64 | 8 | 1 |
□ | □ | □ | □ | □ | □ |
8進数で5505の場合は、位の数値と対応する8進数の数値を掛け算して、その数値を合計します。
32768 | 4096 | 512 | 64 | 8 | 1 |
5 | 5 | 0 | 5 |
512 × 5 = 2560
64 × 5 = 320
8 × 0 = 0
1 × 5 = 5
上記を合計し、2885となります。
10進数からn進数に変換する
通常、10進数からn進数に変換する際には以下の方法を用います。
10進数からn進数に変換する その1
以下は10進数の133を、2進数に変換する場合です。
数値を2で割っていきます。ただし、整数で答えを求め余りを算出します。
さらに答えを2で割り、整数で答えを求め余りを算出します。
最後の答えが1になるまで繰り返します。
以下は133を2で割っていく手順です。
①133を2で割ります(66余り1)
②66を2で割ります(33余り0)
③33を2で割ります(16余り1)
④16を2で割ります(8余り0)
⑤8を2で割ります(4余り0)
⑥4を2で割ります(2余り0)
⑦2を2で割ります(1余り0)
答えが1になったので終了
算出された余りを番号順に右から並べていきます。
また、一番左には最後の答えである1を置きます。上の手順を並べると以下のような2進数が出来上がります。
1 0 0 0 0 1 0 1
図解で表すと以下のようになります。矢印は2進数にする際の並べる順序です。
※番号は上の説明手順とリンクさせてあります。
補足
10進数から2進数に変換する際には2で割り算を行いますが、8進数に変換する際には8で割ります。2進数と違い最後の答えが8より小さくなったら(7以下)終了となります。
10進数の130を、8進数へ変換
①130を8で割ります(16余り2)
②16を8で割ります(2余り0)
答えが2になり、8より小さくなったので終了
算出された余りを番号順に右から並べていきます。
また、一番左には最後の答えである2を置きます。上の手順を並べると以下のような8進数が出来上がります。
2 0 2
10進数からn進数に変換する その2
10進数からn進数へ変換するには、n進数から10進数へ変換する際の手順を応用することでも可能です。
例えば、10進数の118を、2進数へ変換する場合を考えます。
1、2、4、8と2倍ずつしていき、118を超えるまで行います。
その数字を右から並べていき、位にします。(以下は参考の表)
←右から2倍した数字を並べていく
128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
---|---|---|---|---|---|---|---|
□ | □ | □ | □ | □ | □ | □ | □ |
並べた数字【位】を118になるように足し算する(左の数字から足していくとわかりやすい)
→左から118を超えないように足し算
128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
---|---|---|---|---|---|---|---|
□ | □ | □ | □ | □ | □ | □ |
※128は118を超えるため赤で色を付けています。
①64は128以内なので1を置く
②64 + 32 = 96
118以内なので1を置く
また、合計の96は右の位との足し算に利用する
③96 + 16 = 112
118以内なので1を置く
また、合計の112は右の位との足し算に利用する
④112 + 8 = 120
118を超えるので0を置く
また、合計はせず112を右の位との足し算に利用する
⑤112 + 4 = 116
118以内なので1を置く
また、合計の116は右の位との足し算に利用する
⑥116 + 2 =118
118になったため1を置く
残りの桁がある場合は全て0を置き終了します
まとめ
合計に利用した位に1を置き、合計に利用しなかった位は0を置きます。その数字が2進数となります。10進数の118は、2進数では1110110となります。
128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
---|---|---|---|---|---|---|---|
1 | 1 | 1 | 0 | 1 | 1 | 0 |
補足
10進数から8進数へ変換するには、8進数から10進数へ変換する際の手順を応用することでも可能です。
例えば、10進数の132を、8進数へ変換する場合を考えます。
1、8、64、512と8倍ずつしていき、132を超えるまで行います。
その数字を右から並べていき、位にします。(以下は参考の表)
←右から2倍した数字を並べていく
512 | 64 | 8 | 1 |
---|---|---|---|
□ | □ | □ | □ |
並べた数字【位】を一桁ずつ、132になるように掛け算と足し算を行う(左の数字から一桁ずつ行うとわかりやすい)
→左から132を超えないように掛け算と足し算を行う
512 | 64 | 8 | 1 |
---|---|---|---|
□ | □ | □ | □ |
※512は132を超えるため赤で色を付けています。
①64 x 2 = 128
132を超えないように掛け算を行う。3以上で掛け算すると132を超える為、この桁では2が置かれることになる。
また、128は右の位との足し算に利用する。
②128 + (8 x 0) = 128
「左の位までの合計値」と「現在の位と数値を掛け算した結果」を132以内になるように計算する。1以上で計算すると132を超える為、この桁では0が置かれることになる。
また、合計の128は右の位を足し算に利用する。
③128+ (1 x 4) = 132
「左の位までの合計値」と「現在の位と数値を掛け算した結果」を141以内になるように計算する。4で計算すると132となる為、この桁では4が置かれることになる。残りの桁がある場合は全て0を置き終了します。
まとめ
右から、位と7までの数字を目的の数値(上記例での132)を超えないように掛け算します。
次に、左の位までの合計と現在の桁を足算し、目的の数値を超えないように近づけています。
各位で掛け算に利用した数値(0から7)を置きます。その数字が8進数となります。10進数の132は、8進数では204となります。
512 | 64 | 8 | 1 |
---|---|---|---|
□ | 2 | 0 | 4 |
進数変換 復習問題
- 10進数の3を2進数に変換するとどのような数値になるか選んで下さい。
- 解答群
- 3
- 10
- 11
- 12
- 10進数の8を2進数に変換するとどのような数値になるか選んで下さい。
- 解答群
- 8
- 1000
- 1001
- 1100
- 10進数の33を2進数に変換するとどのような数値になるか選んで下さい。
- 解答群
- 33
- 110000
- 100000
- 100001
- 10進数の114を2進数に変換するとどのような数値になるか選んで下さい。
- 解答群
- 1110010
- 1111111
- 1110100
- 1110011
- 2進数の1101を10進数に変換するとどのような数値になるか選んで下さい。
- 解答群
- 10
- 11
- 12
- 13
- 2進数の100001を10進数に変換するとどのような数値になるか選んで下さい。
- 解答群
- 31
- 32
- 33
- 34
- 2進数の110101を10進数に変換するとどのような数値になるか選んで下さい。
- 解答群
- 53
- 54
- 55
- 56
- 2進数の111111を10進数に変換するとどのような数値になるか選んで下さい。
- 解答群
- 63
- 64
- 65
- 66
- 10進数の88を8進数に変換するとどのような数値になるか選んで下さい。
- 解答群
- 130
- 120
- 110
- 111
- 8進数の17を10進数に変換するとどのような数値になるか選んで下さい。
- 解答群
- 15
- 16
- 17
- 18
- お疲れ様でした。
進数変換問題 おまけ練習
表示される10進数の数値(正の数)を2進数に変換してみましょう!
例(2進数で入力すること)
3→11
14→1110
表示される2進数の数値(正の数)を10進数に変換してみましょう!
例(2進数で入力すること)
11→3
1110→14