はじめに
コジマです。
基本情報の試験なんかで2進数や16進数を10進数に変換したり、
またその逆があったりしますね。
あれ、苦手な人が多い印象あるのですが、実は慣れると暗算余裕になれますよ。
ただ、この話がわかれば実際何進数の変換も抵抗無くなります。
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は
と分解できます。
数式で表すと
となります。
これを式変形しましょう。10の累乗を使った形に式変形します。
とできます。
このように10進数は10の累乗を10未満の数でかけた数の組み合わせで表せます。
初めは0乗(=1)から始まるところもポイントです。
10の累乗数にかける数が10未満なのは、10以上の数をかけると繰り上がりが起きるとこの法則が崩れてしまうからです。
この考えを使うと2進数と16進数を10進数に変換することができます。
2進数と16進数を10進数に変換する
2進数
「101110」を例に挙げてみます。
これを2の累乗を使った形に落とし込むことで10進数に変換できます。
実際式にするとこんな感じ。
となり、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」になります。
実際式にするとこんな感じ。
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進数間のを紹介します。
ネットワークの分野なんかで大事になるのでサクッとできるようになるといいですね。
ポイントとしては一つ
これが分かればできたも同然。
2進数の「11011001」を16進数に変換してみます。
こんな感じで対応づけできます。
2進数0000〜1111までと16進数の0〜Fまでの対応づけは頭の中でパッと出てくるようになるといいですね。
難しい場合は10進数を経由するといいです。
16進数から2進数はまるっきし逆の手順なので割愛します。
さいごに
思ったより長くなってしまった!!
要点としては
- ○進数は○個進むと1桁繰り上がる
- ○進数は○の累乗を使った形に式変形できる
- コジマ的には「分解箱詰め法」を推してる
この原理が分かっていると、何進数にも対応できるようになりますよ!
読んでくれた人はありがとうございます!
何進数も恐れないようになりましょう!
自分の知識やノウハウが少しでも誰かのためになったら嬉しいです。
この記事を面白いまたは役に立ったと思ってくれた方は是非私のTwitter(@kojimanotech)を
フォローしてくれたらうれしいです!
もっと学びたい人はこちら
エンジニアになりたい!基本的な知識を身に着けたい!という人のためにおすすめのUdemy講座を紹介いたします!
私が時々扱うエンジニアが身に着けるべき数学の内容だったり、
基本情報や応用情報の試験対策をすることもできます。
エンジニアとして働くために資格は必須ではないですが、私は勉強したほうが良いと思う派です。
最新版: 基本情報技術者試験+応用情報技術者試験+Python+SQL 初心者からプロのエンジニアになる講座
エンジニアにとってネットワークは必要不可欠です。
今こうしてみて頂いている私のブログもインターネットの上で成り立っています。
この講座は基本的といえど、物理層からアプローチしているので小難しく感じると思います。
しかし、この基礎固めができているか否かで今後の成長率が段違いになります。思わぬ障害に出会った時も基本に立ち返り、あなたを適切なアプローチをもたらしてくれるはずです。
ネットワークエンジニアを目指す初心者はここから始めよう!「ゼロから学ぶネットワーク基礎」豊富な図解で徹底解説
気になった人はぜひ見てみてくださいね!
以上、コジマでした。