10進数とn進数の相互変換

記事上広告

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の位

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 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進数に変換するとどのような数値になるか選んで下さい。
  • 10進数の8を2進数に変換するとどのような数値になるか選んで下さい。
  • 10進数の33を2進数に変換するとどのような数値になるか選んで下さい。
  • 10進数の114を2進数に変換するとどのような数値になるか選んで下さい。
  • 2進数の1101を10進数に変換するとどのような数値になるか選んで下さい。
  • 2進数の100001を10進数に変換するとどのような数値になるか選んで下さい。
  • 2進数の110101を10進数に変換するとどのような数値になるか選んで下さい。
  • 2進数の111111を10進数に変換するとどのような数値になるか選んで下さい。
  • 10進数の88を8進数に変換するとどのような数値になるか選んで下さい。
  • 8進数の17を10進数に変換するとどのような数値になるか選んで下さい。
  • お疲れ様でした。
解答群
    1. 3
    2. 10
    3. 11
    4. 12
    1. 8
    2. 1000
    3. 1001
    4. 1100
    1. 33
    2. 110000
    3. 100000
    4. 100001
    1. 1110010
    2. 1111111
    3. 1110100
    4. 1110011
    1. 10
    2. 11
    3. 12
    4. 13
    1. 31
    2. 32
    3. 33
    4. 34
    1. 53
    2. 54
    3. 55
    4. 56
    1. 63
    2. 64
    3. 65
    4. 66
    1. 130
    2. 120
    3. 110
    4. 111
    1. 15
    2. 16
    3. 17
    4. 18

進数変換問題 おまけ練習

表示される10進数の数値(正の数)を2進数に変換してみましょう!

例(2進数で入力すること)
3→11
14→1110

10進数の数値:xxx
2進数の数値:
  

表示される2進数の数値(正の数)を10進数に変換してみましょう!

例(2進数で入力すること)
11→3
1110→14

2進数の数値:xxx
10進数の数値:
  
参加 ブログランキング

記事頑張って書いたかもねー?と思う方は下を押してもらえるといいかなーなんて
にほんブログ村 IT技術ブログへ
にほんブログ村


Javaランキング

目次へのアクセス
スポンサーリンク
レクタングル

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

スポンサーリンク
レクタングル