2進数、10進数、16進数の変換をする方法を原理から理解する

2進数、10進数、16進数の変換をする方法を原理から理解する

はじめに

コジマです。

基本情報の試験なんかで2進数や16進数を10進数に変換したり、
またその逆があったりしますね。

あれ、苦手な人が多い印象あるのですが、実は慣れると暗算余裕になれますよ。

エンジニア向けに書くので、2進数と16進数のみ触れることにします。
ただ、この話がわかれば実際何進数の変換も抵抗無くなります。

10進数について整理する

みんなが当たり前のように使っている
0、1、2、3、4、5、6、7、8、9、10…
のように「10個進むと1桁繰り上がる数」を10進数と言います。
このような書き方を10進法と言います。

この「10個進むと1桁繰り上がる」というのがめちゃくちゃ大事です。

これを頭の片隅に置いた状態で2進数、16進数を考えてみます。

2進数、16進数を説明する

2進数は
0、1、10、11、100、101、110、111、1000…
のように「2個進むと1桁繰り上がる数」を2進数と言います。

同様に、16進数は
0、1、2、…、9、A、B、C、D、E、F、10、11…
のように「16個進むと1桁繰り上がる数」を16進数と言います。
また、9を超えた数字の代わりにA、B、C、D、E、Fを使用します。

原理は同じなんですね。
これらがどういう性質を持つのか。という所がこの話の肝になります。

進数の性質

10進数の「1234」を例に挙げてみましょう。

1234は

1000が1つ、100が2つ、10が3つ、1が4つ

と分解できます。

数式で表すと

1000*1+100*2+10*3+1*4=1234

となります。

これを式変形しましょう。10の累乗を使った形に式変形します。

10^3*1+10^2*2+10^1+10^0*4=1234

とできます。

このように10進数は10の累乗を10未満の数でかけた数の組み合わせで表せます。
初めは0乗(=1)から始まるところもポイントです。
10の累乗数にかける数が10未満なのは、10以上の数をかけると繰り上がりが起きるとこの法則が崩れてしまうからです。

この考えを使うと2進数と16進数を10進数に変換することができます。

2進数と16進数を10進数に変換する

2進数

101110」を例に挙げてみます。
これを2の累乗を使った形に落とし込むことで10進数に変換できます。

実際式にするとこんな感じ。

2^5*1+2^4*0+2^3*1+2^2*1+2^1*1+2^0*0=46

となり、2進数の「101110」は10進数の「46」となります。

下の桁から見ていって、
1が0個
2が1個
4が1個
8が1個
16が0個
32が1個
と考えられるようになるといいと思います。
暗算も容易になります。

16進数

A5」を例に挙げてみます。
同様に16の累乗を使った形に落とし込めば10進数に変換できます。

2進数のとき同様に今度は16の累乗で表せることに注目します。
ここまで読んできたら「1が5個、16が10個」と考えられましたでしょうか?
そう、答えは「165」になります。

実際式にするとこんな感じ。

16^1*10+16^0*5=165

10進数から2進数、16進数に変換する場合も見ていきましょう。

10進数から2進数、16進数に変換する

例えば、10進数の「25」を2進数に変換する時

こうやって教わった人多いと思うんですけど、
個人的に好きではないです(バッサリ)

じゃあ、どうやるかというのを説明していきます。

2進数

実際の手順を説明します。
私の提唱する「分解箱詰め法」(この記事書きながら考えた)を紹介します。
先ほどの「25」を2の累乗数で分解します。

コツとしては大きい数から分解していきます。
25は2の累乗数の16より大きく、32より小さいです。
よって、25=16+9と分解できます。

次は余りの9に着目します。
9は8より大きく、16より小さいので
9=8+1とでき、25=16+8+1となります。

最後が1or0(=2未満)になれば分解完了。

16=2^4,8=2^3,1=2^0なので、
答えは「11001」となります。

細かく説明するために長ったらしくなってしまいましたが、
イメージとしては箱に数字を詰めていく感じです。(分解箱詰め法たる所以)

私の頭の中はこんな感じ。

正直、やってることの本質は筆算を使う世の定石と同じです。
分解箱詰め法」では筆算使わないので、無駄なスペースを使わないで済むのです。
同じことを16進数=>10進数の変換にも適用できます。

16進数

16進数もやり方は同じですが、少しコツが要ります。
10進数の「230」を16進数に変換したいときを考えます。

230は16より大きく、256(=16^2)より小さいです。

ここで、230=16+214だ!として終わってはいけません。
16より小さい数になるまでやります。

16*14=224なので、14かけます。
【計算の豆知識】(15+1)(15-1)=225-1=224と計算すると暗算も楽チンです

230=16*14+6になりました。
すなわち16が14個(=E)、1が6個なので答えは「E6」となります!

2進数と16進数の変換

最後に2進数-16進数間のを紹介します。
ネットワークの分野なんかで大事になるのでサクッとできるようになるといいですね。

ポイントとしては一つ

16進数1桁は2進数4桁分である!

これが分かればできたも同然。

2進数の「11011001」を16進数に変換してみます。

こんな感じで対応づけできます。

2進数0000〜1111までと16進数の0〜Fまでの対応づけは頭の中でパッと出てくるようになるといいですね。
難しい場合は10進数を経由するといいです。

16進数から2進数はまるっきし逆の手順なので割愛します。

さいごに

思ったより長くなってしまった!!

要点としては

  • ○進数は○個進むと1桁繰り上がる
  • ○進数は○の累乗を使った形に式変形できる
  • コジマ的には「分解箱詰め法」を推してる

この原理が分かっていると、何進数にも対応できるようになりますよ!

読んでくれた人はありがとうございます!
自分の知識やノウハウが少しでも誰かのためになったら嬉しいです。

この記事を面白いまたは役に立ったと思ってくれた方は是非私のTwitter(@kojimanotech)を
フォローしてくれたらうれしいです!

以上、コジマでした。


数学カテゴリの最新記事