基本情報技術者

2進数?10進数??16進数???n進数と基数変換をわかりやすくまとめる!

更新日:

 

「n進数」

 

小学校や中学校の情報の授業で一番最初に勉強する項目ですね。

代表的なものとしては、2進数や10進数のほかに8進数や16進数があります。

 

今回はこれらを完璧に理解するために、僕なりに分かりやすくまとめてみました!

n進数とは?

情報処理でよく目にする言葉。

このn進数は簡単に言うと、ある数字を表すために何種類の文字を使っているかを表しています。

 

1,2,3,4,5,6,7,8,9,10…と普通に数字を使う方が私たちにはわかりやすいですが、コンピューターと相性がいいとは限りません。

2種類がいい時もあれば8種類がいい時もある。

 

一つ一つ説明していきましょうか♪

10進数

2進数からと思わせて10進数から!

なぜならこれが私たちがよく見る数字だから。

 

0,1,2,3,4,5,6,7,8,9の10種類の文字ですべての数字を表します。

 

これは説明するまでもないですね。

28だったら28、1.375だったら1.375という風にそのまま表しています。

 

コンピューターの処理によって画面にはじき出されるのが10進数ですね!

2進数

情報処理で一番よく聞くと言っても過言ではない2進数

 

0,1の2種類の文字ですべての数字を表します。

2⁰ とか 2¹ とか 2⁴ を使って数字を表すあれです。

ここから桁の考え方が重要になってきますね!

 

例えば10011という5桁の2進数だったら

1桁目 1

2桁目 1

3桁目 0

4桁目 0

5桁目 1 なので

2⁰×1 + 2¹×1 + 2²×0 + 2³×0 + 2⁴×1

=1×1 + 2×1+ 4×0 + 8×0 + 16×1

=1 + 2 + 0 + 0 + 16

=19

という10進数で表せます。

 

小数点の場合は桁数が下がるにつれて2⁻¹、2⁻²、2⁻³と小さくなっていきます。

例えば0.1011という2進数だったら

2⁰×0 + 2⁻¹×1 + 2⁻²×0 + 2⁻³×1 + 2⁻⁴×1

=1×0 + 0.5×1+ 0.25×0 + 0.125×1 + 0.0625×1

=0 + 0.5 + 0 + 0.125 + 0.0625

=0.6875

という10進数で表せます。

 

2がすべての基本となるのが2進数ですね!

10進数と2進数の基数変換

2進数から10進数に変換するのはさっきやったみたいに2⁰とか2⁻¹とかを桁ごとに当てはめていきますね。

では逆に10進数から2進数に変換するときは?

 

「28を2進数で表すとなんですか?」

って言われて

「えっと、28は16と8と4でできてるから2⁴+2³+2²で11100かな?」

みたいにやっていくとめんどくさいしややこしいしで効率が悪いですね。

 

そんな時はこちら。

整数は2で割っていき、小数点以下は2をかけていくの法則です!!

 

2進数の練習問題

28を例にすると

28 ÷ 2 = 14 …0

14 ÷ 2 = 7   …0

7   ÷ 2 = 3   …1

3   ÷ 2 = 1   …1

1   ÷ 2 = 0   …1

ですよね?(…の先は割った余りを表しています。)

この余りの部分を下から読んでいけばいいんです!

 

ほら、11100

あら簡単。

 

そして小数点がある場合

1.375を例にすると

1は置いといて0.375から考えて行き、2をかけていって整数部分に注目します。

0.375 × 2 = 0.75 →0

0.75   × 2 = 1.5   →1 ここでまた小数点以下で考える

0.5  × 2 = 1.0    →1

1.0になったら終わりです。

 

さて、これを上から順番に並べて最初に置いといた1=2⁰を加えると…

1.011

となります。

 

1.011

=2⁰ × 1 + 2⁻¹ × 0 + 2⁻² × 1 + 2⁻³ × 1

=1 × 1 + 0.5 × 0 + 0.25 × 1 + 0.125 × 1

=1.375

あら不思議(*'▽')

 

小数点以下は少しややこしいですが、2をかけて1以上になったら1を引っこ抜いてまた小数点以下に2をかけていくのをお忘れなく!

 

整数は2で割っていき、小数点以下は2をかけていくの法則でした♪

8進数

2進数から一気にややこしくなりましたね(;´∀`)

学生の頃やったかな…?あまり目立たない8進数。

 

0,1,2,3,4,5,6,7の8種類の文字ですべての数字を表します。

 

「8と9抜けとるやん、そんなんで大丈夫?」

って感じになりますよね(笑)

 

8進数、16進数は2進数では長くなりすぎる数字を短くまとめるイメージをもつと分かりやすいですね。

そのため8進数、16進数は基本的に2進数との基数変換を行っていきます。

 

例えば110010.001101という2進数を8進数にするとき

 

8=2³ということは3がキーワードになりそう…

そう、3つずつの数字のグループを作るんです。

 

110 010 . 001 101

に分けてそれぞれで2進数を10進数に基数返還する感じにすると…

110:

2² × 1 + 2¹ × 1 + 2⁰ × 0 = 6

010:

2² × 0 + 2¹ × 1 + 2⁰ × 0 = 2

001:

2² × 0 + 2¹ × 0 + 2⁰ × 1 = 1

101:

2² × 1 + 2¹ × 0 + 2⁰ × 1 = 5

 

これらをつなぎ合わせると…

62.15

これが110010.001101を8進数で表したものです。

なんだかシンプルにまとまりましたね♪

 

ちなみに1001100.0110011を3つの数字のグループで分けようとすると

1 001 100 . 011 001 1

みたいに仲間はずれができちゃいますね。

 

そんな時は端っこに0を足しちゃいましょう!

001 001 100 . 011 001 100

でオッケーです!

これでさっきみたいな計算をしてみてください。

 

8進数の練習問題

じゃあ今までみたいに28と1.375を8進数で表します。

 

28(10進数) = 11100(2進数)なので011と100に分けて

011:

2² × 0 + 2¹ × 1 + 2⁰ × 1 = 3

100:

2² × 1 + 2¹ × 0 + 2⁰ × 0 = 4

つまり、28(10進数)=11100(2進数)=34(8進数)です!

 

 

そしてお次は1.375(10進数) = 1.011(2進数)なので001と011に分けて

001:

2² × 0 + 2¹ × 0 + 2⁰ × 1 = 1

011:

2² × 0 + 2¹ × 1 + 2⁰ × 1 = 3

つまり、1.375(10進数)=1.011(2進数)=1.3(8進数)です!

 

原理が分かると楽しくなってきますね!

16進数

8進数が理解できたら16進数は飲みこみやすいです。

 

0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,Fの16種類の文字ですべての数字を表します。

なんかややこしそうに見えるけど考え方は8進数と似ているからご安心を。

 

16進数も基本的に2進数との基数変換を行っていきます。

 

例えば10100010.1101という2進数を16進数にするとき

 

8=2⁴ということは今度は4がキーワードになりそう…

そう、4つずつの数字のグループを作るんです。

 

1010 0010 . 1101

に分けてそれぞれで2進数を10進数に基数返還する感じにするんですが、ここで注意するのはA,B,C,D,E,Fの考え方です。

 

16進数なので、0~15までの数字が出てきます。

0~9は数字で表せるけど10からは2桁になっちゃう…もちろんこれはダメ。

なので、1桁で表せない10,11,12,13,14,15をそのままA,B,C,D,E,Fにしちゃいます!

 

習うより慣れろなのでさっきの問題に戻りましょう。

1010 0010 . 1101 でしたね。

1010:

2³ × 1 + 2² × 0 + 2¹ × 1 + 2⁰ × 0 = 10 = A

0010:

2³ × 0 + 2² × 0 + 2¹ × 1 + 2⁰ × 0 = 2

1101:

2³ × 1 + 2² × 1 + 2¹ × 0 + 2⁰ × 1 = 13 = D

 

これらをつなぎ合わせると…

A2.D

これが10100010.1101を16進数で表したものです。

 

なんだかローマ字が入るとよくわからない文字になりますね(;´・ω・)

でもコンピューターはこれがいいんでしょう。

 

そして11001.011001みたいに4つの数字のグループを作ると

1 1001 . 0110 01

って感じで仲間はずれができちゃうときは8進数と同じように端っこに0を足してください!

0001 1001 . 0110 0100

で同じように計算します。

 

16進数の練習問題

じゃあ今までみたいに28と1.375を16進数で表します。

 

28(10進数) = 11100(2進数)なので0001と1100に分けて

0001:

2³ × 0 + 2² × 0 + 2¹ × 0 + 2⁰ × 1 = 1

1100:

2³ × 1 + 2² × 1 + 2¹ × 0 + 2⁰ × 0 = 12 = C

つまり、28(10進数)=11100(2進数)=1C(16進数)です!

 

 

そしてお次は1.375(10進数) = 1.011(2進数)なので0001と0110に分けて

0001:

2³ × 0 + 2² × 0 + 2¹ × 0 + 2⁰ × 1 = 1

0110:

2³ × 0 + 2² × 1 + 2¹ × 1 + 2⁰ × 0 = 5

つまり、1.375(10進数)=1.011(2進数)=1.5(16進数)です!

 

16進数まで分かるとなんか感動しますね(笑)

終わりに

以上でn進数の中でも有名な2進数、10進数、8進数、16進数の説明を終わります。

情報処理の基礎の基礎なのでここは忘れずにしっかりと理解して覚えておきたいです!

 

ふと気になった時の復習に使ってください♪

 

最後まで読んでいただきありがとうございました(^.^)

-基本情報技術者

Copyright© Ring Ring , 2018 All Rights Reserved.