キャリテク!マガジン
- TOP
- キャリテク!マガジン
- 【超初心者向け】基数理論とは?~基数変換の考え方~
【超初心者向け】基数理論とは?~基数変換の考え方~
みなさんこんにちは!株式会社AltX 採用担当の菊池です。
みなさんコチラのコラムはご覧いただけましたか?
実は私、数学・・・なんなら算数(笑)が大の苦手です。。。
なので、ちょっと今回は難しいな~と感じてしまったので、当社の研修制度「キャリテク!」の講師に詳しく聞いてみました!
きっと私と同じように2進数や10進数と聞いて「はて (;´∀`)?」と思ったり、数字を見ると途端に思考がストップしてしまう方もいらっしゃると思いますので← そんな方々はぜひご覧ください!
一番大切なことは「仕組みを理解すること」
まず大前提として、このお題に限らずいつも当社の講師が教えていることは、
「公式を覚えるな!仕組みを理解しろ!」
です。
・・・と、言われましても(;´∀`)苦笑
と、思う方もいらっしゃいますよね。笑
どういうことかと言うと、数学は公式を当てはめることによって解けるらしいのですが(私は解けないときもあるけど←)、人間は忘れる生き物だし、公式をド忘れしちゃったらそこで終了。何なら違う公式に当てはめちゃったりしてもきっと気付けずそこで終了。問題解決には至らないだろうと・・・
じゃあどうしたら良いのか?というと、そもそもの仕組みを理解していれば、公式をド忘れしてしまっても対応できるハズとのことでした。
ということで、今回はしっかり基礎の基礎から理解していきましょう!
◆10進数とは?
それでは、まず10進数について解説したいと思います。
■10進数とは:私たち人間が普段から利用している、数を表す方法!
普段私たちは「0」「1」「2」「3」「4」「5」「6」「7」「8」「9」の10個の数字を使って数を表現していますよね。
一桁で表せなくなったら10の位を作って、「11」「12」「13」~・・・のように表現して数を表しています。
ちなみになぜ10個の数字で表すかというと、「人間の指の数が合わせて10本だから」と言われているらしいです。へぇ~。多分諸説あるだろうけど。
では、もう一つの2進数とは何ぞや??というと・・・
◆2進数とは?
■2進数とは:コンピューターが使う、数を表す方法!
コンピューターさんは、人間と違って「0」と「1」のみで数を表現します。
なので、コンピューターさんは「0」か「1」しか理解できません。
人間の表現である10進数では、一桁の数字を「1、2、3、4、5~」、二桁の数字を「10、11、12~・・・」と表すのに対して、コンピューターさんが使う2進数では、一桁の数字は「0」と「1」のみで、それ以上になると「10、11、100、101、110、111、1000・・・」と表現します。
一桁が0と1しかなくて、それ以上になると10の位や100の位を作って表すイメージですね。
ちなみになぜ2個の数字で表すかというと、スイッチはオンとオフの2つだからみたい。 これは何だか信ぴょう性高そう!笑
それと、もう少し深掘ると、2進数の世界では「桁」のことを「bit(ビット)」と呼ぶそうです。
コンピューターさんは効率よく計算を行うために、決まった大きさの入れ物にデータを入れる形で読み書きをするらしく、bitはその入れ物の数だと覚えると分かりやすいかも?
例えば・・・
10進数の表現 | 2進数の表現 | データの最小単位 |
0 | 0⃣ | 1bit(0か1を入れられる箱が1つ) |
1 | 1⃣ | 〃 |
2 | 1⃣0⃣ | 2bit(0か1を入れられる箱が2つ) |
3 | 1⃣1⃣ | 〃 |
4 | 1⃣0⃣0⃣ | 3bit(0か1を入れられる箱が3つ) |
これがコンピューターさんの数え方。
まぁbit~Byteのくだりはちょっと置いておいても良いとして、以下の違いは必ず覚えましょう!
これで10進数と2進数の違いは何となく分かりましたね。
◆基数変換とは?
ここでちょっと考えてみてください。
人間の世界でも「英語しか話せない人」と「日本語しか話せない人」はコミュニケーションが取れないですよね。
これを人間とコンピューターさんに置き換えると、人間の表現(10進数)で表現してもコンピューターさんには伝わらないってことですよね。
・・・あら大変(; ・`д・´)!!!どうしましょう!?
となったときに必要なのが、「基数変換」というものです。
人間とコンピューターさんがコミュニケーションを取るためには、2進数→10進数に、もしくは10進数→2進数に・・・等、お互いの表現方法に通訳してあげる必要があります。
このように、「通訳してあげること」を「基数変換」と覚えるといいかも。
ではさっそく変換方法を!! と、思ったのですが、その前に理解しておかなければいけないことがあるようです...!
◆10進数の考え方
これはみんな大丈夫でしょ~!!!と思うでしょ?笑
いやいや、基礎中の基礎を侮るなかれ。前提条件としてまずは一緒に確認してみましょう!
10進数の表し方って、小学生の時にこんな風に教わりましたよね。
このように、10進数では0~9までの10個の数字を用いているため、「10」を桁上りの基準として、「1の位、10の位、100の位、1000の位~・・・」と桁数の位を作って表現しています。
例えば「123」という数字の場合は、下記のように表現しているということですね。
100の位 | 10の位 | 1の位 |
1 ※100の塊が1つ | 2 ※10の塊が2つ | 3 ※1個が3つ |
一方で、2進数では「0」と「1」の2つの数字を用いているため、「2」を桁上がりの基準とするそうです。
ということは、「1の位」と「2の位」があることは確定!
で、それよりももっと上の桁ってどうなるの?というと・・・
128の位 (2の7乗) | 64の位 (2の6乗) | 32の位 (2の5乗) | 16の位 (2の4乗) | 8の位 (2の3乗) | 4の位 (2の2乗) | 2の位 | 1の位 |
こんな感じ。
何やら2進数は、それぞれの桁において2の累乗が何個あるのかを示しているらしいです。
(※累乗とは:同じ数をくり返しかけ算すること。)
◆2進数→10進数への変換方法
さて、ここまで分かったらいよいよ変換方法!
2進数から10進数に変換する場合、それぞれの位に対して「重み」をかけ、それを合算することで10進数を求めることができるとのこと。
※「重み」とは、1桁あがるごとに増えていく値(2進数の場合は2倍)のこと
ということは、仮に2進数の数字が「10101010」だった場合、10進数ではどうなるか?と考えると・・・
えーっと、2進数の位がコレでしたよね。
128の位 | 64の位 | 32の位 | 16の位 | 8の位 | 4の位 | 2の位 | 1の位 |
これに2進数の数字をあてはめると、こうなって・・・
128の位 | 64の位 | 32の位 | 16の位 | 8の位 | 4の位 | 2の位 | 1の位 |
1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 |
さらに2進数の数字に対して重みを掛けた数がこうなりますよね・・・
128の位 | 64の位 | 32の位 | 16の位 | 8の位 | 4の位 | 2の位 | 1の位 |
1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 |
128×1=128 | 64×0=0 | 31×1=32 | 16×0=0 | 8×1=8 | 4×0=0 | 2×1=2 | 1×0=0 |
で、掛けた数(=●●と出た数字)の合計を求めると・・・
128 + 32 + 8 + 2 = 170
答えは、【2進数:10101010=10進数:170】となりました!
本当かな?一応確かめてみると・・・
おー!正解!!
できましたー!!!
◆10進数→2進数への変換方法
では、今度は逆をやってみましょう!
10進数から2進数に変換する際には、2進数の位よりも数字が大きいか?それとも小さいか?を考えると良いそうです。
今回は適当な数字を変換してみましょうか。
そうだなぁ。じゃあ、「163」で!笑
まずは頭を整理するために、2進数の位を準備しま~す。
128の位 | 64の位 | 32の位 | 16の位 | 8の位 | 4の位 | 2の位 | 1の位 |
で、左から順番に当てはめていきます。
10進数の値「163」は、2進数の位である「128」より大きい?小さい??
大きい場合は2進数の値に「1」、小さい場合は「0」を当てはめましょう!
すると、こうなりますよね。
ここで、10進数の値「163」から2進数の位「128」を引きます。
計算式は【163-128=35】となり、残った10進数の値は「35」となります。
では次。
残った10進数の値である「35」は、2進数の位である「64」より大きい?小さい??
大きい場合は2進数の値に「1」、小さい場合は「0」を当てはめましょう!
すると、こうなる…と。
で、また先程と同じように残った10進数の値「35」から2進数の位「64」を引きま・・・
と思ったら引けない!笑
この場合には次の位に持ち越すそうです。
これを繰り返していくと、こんな感じになります。
答えは、【10進数:163=2進数:10100011】となりました!
こちらも電卓で確かめてみると・・・
おー!こちらもできました!
◆小数点が発生する場合は?
なんだか変換出来た気がするのですが、ここで一つ疑問が浮かんでしまいました。
これ、コチラのコラムでは小数点が出てきましたよね。
この場合はどうなるのか聞いてみたところ、小数点においても変換方法は一緒のようですが、位が小数点仕様に変わるそうです。
こんな感じに。
1の位 | 1/2の位 | 1/4の位 | 1/8の位 | 1/16の位 | 1/32の位 | 1/64の位 | 1/128の位 |
それぞれの桁において1/2の累乗が何個あるか示しています。
◆コラムの振り返り
せっかくなので、試しにコラムの例題を解いてみましょう!
例題では、10進数の演算式7÷32の結果を2進数で表す問題でしたね。
コラムに記載の通り、まずは10進数で演算式7÷32の結果を求めます。
すると、【7÷32=0.21875】となりますね。
さて、ここからは本コラムでお伝えした内容を基に答えを出していきますよ!
まず【10進数:0.21875】を図に当てはめていくため、2進数の位を準備します。
分かりやすいように小数表記もいれておきましょう!
次に、10進数の値「0.21875」は、2進数の位である「1」より大きいか?小さいか?を求めます。
⚠ここで要注意ポイント⚠
整数の場合は【大きい場合は2進数の値に「1」、小さい場合は「0」】でしたが、
小数点の場合は【大きい場合は2進数の値に「0」、小さい場合は「1」】と逆になります!
そうすると、こうなります。
手順は同じなので、計算式も入れちゃいますね。
ということで、【10進数:0.21875】は、【2進数:0.00111】という結果になりました!
何となくイメージ出来ましたでしょうか?
このように、仕組みを理解することで公式をド忘れしてしまっても対応できますので、お勉強中の方はぜひ「仕組みを理解する」ことをゴールに学習することをおススメします!
当社ではエンジニア未経験の方や経験が浅い方を対象として、未経験者向けITエンジニア育成採用プログラム「キャリテク!」を運営しています。
インフラエンジニア・ネットワークエンジニアの転職に興味がある方は、ぜひ一度説明会にご参加ください!
https://www.kcct.co.jp/careetec/seminar/tokyo/
よろしければ、本コラムの感想をお聞かせください!
読者の皆様から頂いたご意見を基に、改善・改良してまいります✊