16進数を知ろう! 2進数との関係が大事です。
- 2022.03.19
- study_programming
- 基本情報技術者試験
悩み
そもそも、16進数って何?それって知らないといけないの?
結論
16進数は知っておいた方が良いです。
なぜなら、
- ITエンジニアとしてn進数の理解はとても重要だから。
- 基本情報技術者試験でよく聞かれるから。
信頼性
この記事を読むとできる様になること
- 16進数の理解ができる。
- 16進数と10進数の基数変換ができる。
- 16進数と2進数の関係を理解でき、基数変換できる。
ITエンジニアとして、n進数の理解は避けては通れないもの。そのため、基本情報技術者試験でもn進数はよく聞かれます。
特に試験上重要なのが、
- 2進数
- 8進数
- 10進数
- 16進数
の4つです。
今回は、16進数について解説しております。
合わせてこちらの記事もご覧ください。
なお、冒頭の「16進数の小数 0.248を10進数の分数にすると?」の答えは、「73/512」です。
解答手順は次の通りです。
① 0.248の小数点以下の各桁に1/16nを掛ける
(nは1からスタートし、桁が下がるごとに1つずつ増やしていく)
2 4 8
× × ×
1/161 1/162 1/163
② ①で求めた数値を合計する
2 4 8
× × ×
1/161 1/162 1/163
|| || ||
2/16 4/256 8/4096
= 512/4096 + 64/4096 + 8/4096
= 584/4096
= 73/512
n進数とは?
n進数とは、「この世の数字はn個の数字によって表現されている」と言えます。
n個の数字とあることから、nには数字が入ります。
16進数の理解
n進数はn個の数字によって表現された世界。
そのため、nに16を入れれば16進数となります。
そして、16進数とは16個の数字で表現された世界。
つまり、この世の数字を、0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F の16個の数字だけで表現された世界です。
A~Fが数字?と思った方もいるかと思います。
普段 10進数の世界で生きている我々の世界では、9の次は、桁上がりで表現された10を使います。
これは、10進数の世界では 0~9の10個のみの数字で表現されるからです。
つまり、9の次の数字以降を1字で表現する数字は存在しないと言えます。
一方、16進数の世界では、15番目の数字の次に桁上がりをして、10を表現します。
そのため、16進数の世界では、10進数における10〜15の数字を表現するために、A~Fを使っています。
A~Fを数字としてとらえよう!
2進数・8進数・10進数・16進数の比較
ここで、2進数・8進数・10進数・16進数を比較してみましょう。
2進数 | 8進数 | 10進数 | 16進数 |
---|---|---|---|
0 1 10(桁上がり) 11 100(桁上がり) 101 110 111 1000(桁上がり) 1001 1010 1011 1100 1101 1110 1111 10000(桁上がり) |
0 1 2 3 4 5 6 7 10(桁上がり) 11 12 13 14 15 16 17 20 |
0 1 2 3 4 5 6 7 8 9 10(桁上がり) 11 12 13 14 15 16 |
0 1 2 3 4 5 6 7 8 9 A B C D E F 10(桁上がり) |
桁上がりのタイミングに注目してください。
桁上がりのタイミングを理解することがn進数の世界を理解することになります。
10進数と16進数の基数変換をしよう!
ここでは、10進数と16進数の基数変換を克服するための手順について解説します。
基数変換を習得する3つの手順
- 整数部と小数部を分ける
- 16進数から10進数へのパターン、10進数から16進数へのパターンがあることを理解する
- 全部で4つのパターンがあるこを知り、紙とペンを用意し手を動かす。
1. 整数部と小数部に分ける。
まずは、数字を整数部と小数部に分けます。
整数部とは、小数点の左側。
小数部とは、小数点の右側です。
例えば、552.125の場合。
整数部は、552。小数部は、 0.125です。
2. 4つのパターンを押さえる
整数部と小数部に分けたら、それぞれに、 10進数から16進数へのパターン、16進数から10進数へのパターンを適用しましょう。
これを、まとめると以下のマトリクスになります。
整数部 | 小数部 | |
---|---|---|
10進数から16進数 | ① | ② |
16進数から10進数 | ③ | ④ |
それでは、実際に①〜④の順で例題を基数変換していきましょう。
ここでは、例題として、10進数では、「110.453125」、16進数では、「6E.74」を使って行きます。
2つとも同じ数字を指しています。
① 10進数の整数部「110」を16進数「6E」に変換
1. 整数部を16で割ります。
(16で割るのは、16進数だからです。)
110 ÷ 16
2. 商と余を算出します。
110 ÷ 16 = 6 (商)・・・14 (余)
3. 算出した商をさらに16で割って行きます。
(この場合、6をさらに16で割ります。)
110 ÷ 16 = 6・・・14
6 ÷ 16 = 0・・・6
4. 3を繰り返し、商が0になるまで行います。
110 ÷ 16 = 6・・・14
6 ÷ 16 = 0・・・6
(ここで、商が0となりました。計算終了です。)
5. 余を下から並べたら、16進数の出来上がりです。
110 ÷ 16 = 6・・・14 ↑ ※10進数「14」は、16進数では、「E」と読み替える
6 ÷ 16 = 0・・・6 ↑
= 6 E
② 10進数の小数部「0.453125」を16進数「0. 74」に変換する
1. 10進数の小数部に16を掛け算します。
(16を掛けるのは16進数だからです)
0.453125 × 16 = 7.25
2. 1.で算出した答えの整数部と小数部の内、整数部をメモし、小数部に16を掛けます。
0.453125 × 16 = 7.25 ・・・ 整数部 → 7 : 小数部 → 0.25
0.25 × 16 = 4.0
3. 2.を繰り返し、小数部が0になるまで行います。
0.453125 × 16 = 7.25 ・・・ 整数部 → 7 (小数部0.25)
0.25 × 16 = 4.0 ・・・ 整数部 → 4
(小数部が0となったので、ここで終了です。)
4. メモした整数部の値を上から順番に並べたら、小数部における16進数の出来上がりです。
0.453125 × 16 = 7.25 ・・・ 整数部 → 7 ↓
0.25 × 16 = 4 ・・・ 整数部 → 4 ↓
= 0. 7 4
となります。
③ 16進数の整数部「6E」から10進数「110」に変換する。
1. 整数部「6E」の各桁に16nを掛けます。
nは、0からスタートし、各桁が上がるごとに1ずつ増やして行きます。
6 E※(=14)
× ×
161 160
※Eは、10進数では「14」ですので、計算しやすいように14に直します。
2. ここで16nを変換してみましょう。
160 = 1 (どんな数字に0乗を掛けても、「1」となると覚えておきましょう)
161 = 16
となります。
3. 計算結果を全て足し合わせたら10進数「110」の出来上がりです。
6 E※(=14)
× ×
161 160
|| ||
96 + 14 = 110
④ 16進数の小数部「0.74」を10進数「0.453125」に変換する。
1. 小数部「74」の各桁に1/16nを掛けます。
nは、1からスタートし、各桁が下がるごとに1ずつ増やして行きます。
0. 7 4
× ×
1/161 1/162
2. ここで、1/16nを変換してみましょう
1/161 = 1/16 = 1 ÷ 16 = 0.0625
1/162 = 1/256 = 1 ÷ 256 = 0.00390625
3. 計算結果を全て足し合わせたら10進数「0.453125」の出来上がりです
0 . 7 4
× ×
0.0625 0.00390625
(1/161) (1/162)
|| ||
0.4375 + 0.015625 = 0.453125
全部で4つのパターンがあるこを知り、紙とペンを用意し手を動かす
先ほどの、マトリクスをまとめるとこんな感じです。
整数部 | 小数部 | |
---|---|---|
10進数から16進数 | ①16で割り算・余を下から | ②16で掛け算・整数部を上から |
16進数から10進数 | ③16nで掛け算(nは桁が上がるごとに1ずつ増) | ④1/16nで掛け算(nは桁が下がるごとに1ずつ増える) |
例題
10進数「110.453125」
16進数 「6E.74」
3回ほど繰り返せば、もう基数変換は怖くはありません。
コンピュータは電気で動く
コンピュータの動力は電気です。
そして、電気はONとOFFの2択。
そのため、電気で動くコンピュータの考えもまた2択と言えます。つまり、0と1で表現される2進数の世界で生きていると言えます。
だから、 コンピュータを理解するために、ITエンジニアにとって2進数の理解はとても重要なのです。
2進数と16進数の関係性を理解する
2進数は16進数と相性が良いです。
なぜなら、16は24で表現できるから。
これは、2進数の「0000〜1111」が、16進数の「0〜F」に対応しています。
つまり、16進数の1桁は、2進数の4桁分ということです。
試しに、2進数「1111」を、16進数にしてみましょう。
ここでは、10進数を経由して変換します。
まず、2進数「1111」を10進数にしてみましょう。
1 1 1 1
× × × ×
23 22 21 20
|| || || ||
8 + 4 + 2 + 1 = 15
10進数「15」が求められました。
そして、10進数の15は、16進数では「F」ですね。
2進数と16進数の関係がわかりました。
では、なぜ24で表現するのでしょうか?
それは、人間にとって読みやすくするためです。
例えば、
2進数「111010110101」があったとします。
これを16進数にすると、「 EB5」となります。
だいぶスッキリして読みやすくなりました。
コンピュータは2進数しか扱えないため、どうしても桁が多くなります。
そこで、人間にとって読みやすく翻訳してあげる必要があります。
その翻訳に使うのが、8進数や16進数というわけです。
2進数と16進数の基数変換
2進数から16進数、16進数から2進数へ変換していきましょう。
2進数から16進数への変換
ここで、2進数から16進数に変換しましょう。
まず、考えられるのが10進数を経由するやり方だと思います。
先ほどの2進数「111010110101」を10進数にすると、、、
1 1 1 0 1 0 1 1 0 1 0 1
× × × × × × × × × × × ×
211 210 29 28 27 26 25 24 23 22 21 20
|| || || || || || || || || || || ||
2048 + 1024 + 512 + 0 + 128 + 0 + 32 + 16 + 0 + 4 + 0 + 1
= 3765
と、なります。
そして、10進数「3765」を16進数にします。
3765 ÷ 16 = 235 ・・・ 5 ↑
235 ÷ 15 = 14 ・・・11(B) ↑
14 ÷ 16 = 0 ・・・14(E) ↑
= EB5
16進数「EB5」が求まりました。
しかし、このやり方だと、桁数が多くなると計算がとても大変です。
そこで、16進数は2進数の4桁分ということを利用して、 2進数から16進数へ直接、基数変換することができます。
例題として、先ほどの2進数「111010110101」、16進数「EB5」を使っていきます。
2進数から16進数への直接変換手順は次の3つです。
①2進数を4桁ごとに区切る。
②各区分のそれぞれの桁に20~3をかける。
③各区分で求めた、合計値が16進数の各桁に相当する。
①2進数を4桁ごとに区切る
まず、2進数を4桁ごとに区切りましょう。
(4桁に区切るのは、16進数が2進数の4桁分に相当する為です)
1 1 1 0 | 1 0 1 1 | 0 1 0 1
3つの区分ができました。それぞれの区分が16進数の各桁に相当します。
②各区分のそれぞれの桁に20~3を掛ける。
各区分の各桁に2nを掛けます。nは桁が上がるごとに1ずつ増やしていきます。
1 1 1 0 | 1 0 1 1 | 0 1 0 1
× × × × × × × × × × × ×
23 22 21 20 23 22 21 20 23 22 21 20
③各区分で求めた、合計値が16進数の各桁に相当する。
各区分ごとに求めた数値を足し合わせる。
1 1 1 0 | 1 0 1 1 | 0 1 0 1
× × × × × × × × × × × ×
23 22 21 20 23 22 21 20 23 22 21 20
|| || || || || || || || || || || ||
8 + 4 + 2 + 0 8 + 0 + 2 + 1 0 + 4 + 0 + 1
|| || ||
14(E) 11(B) 5
16進数「EB5」が求まりました。
16進数から2進数への基数変換
続いて16進数「EB5」を2進数へ変換してみましょう。
16進数から2進数への基数変換の手順は、次の3つです。
①16進数の各桁を分割し、各桁ごとに2を割って計算する
②商と余を算出し、商が0になるまで繰り返す
③余りを算出の逆順に並べたら、16進数の各桁の2進数の出来上がり
①16進数の各桁を分割し、各桁ごとに2を割って計算する
EB5を分割。
E | B | 5
それぞれを2で割っていきます。
なお、計算の為「E」は14、「B」は11の10進数に読み替えます。
②商と余を算出し、商が0になるまで繰り返す
「E(14)」を計算
14 ÷ 2 = 7(商)・・・0(余)
7 ÷ 2 = 3 ・・・ 1
3 ÷ 2 = 1 ・・・ 1
1 ÷ 2 = 0 ・・・ 1
「B(11)」を計算
11 ÷ 2 = 5(商)・・・ 1(余)
5 ÷ 2 = 2 ・・・ 1
2 ÷ 2 = 1 ・・・ 0
1 ÷ 2 = 0 ・・・ 1
「5」を計算
5 ÷ 2 = 2 ・・・ 1
2 ÷ 2 = 1 ・・・ 0
1 ÷ 2 = 0 ・・・ 1
③余りを算出の逆順に並べたら、16進数の各桁の2進数の出来上がり
②で、「5」の計算時だけ、2進数が3桁となっています。そこで、0を補って4桁にしてあげましょう。
なぜなら、16進数は2進数の4桁分ですので、4桁にする必要があります。
「E(14)」を計算
14 ÷ 2 = 7 ・・・ 0 ↑
7 ÷ 2 = 3 ・・・ 1 ↑
3 ÷ 2 = 1 ・・・ 1 ↑
1 ÷ 2 = 0 ・・・ 1 ↑
= 1110
「B(11)」を計算
11 ÷ 2 = 5 ・・・ 1 ↑
5 ÷ 2 = 2 ・・・ 1 ↑
2 ÷ 2 = 1 ・・・ 0 ↑
1 ÷ 2 = 0 ・・・ 1 ↑
= 1011
「5」を計算
5 ÷ 2 = 2 ・・・ 1 ↑
2 ÷ 2 = 1 ・・・ 0 ↑
1 ÷ 2 = 0 ・・・ 1 ↑
0 ↑ ←0を補う
= 0101
E | B | 5
1110 | 1011 | 0101
2進数「1110 1011 0101」が求まりました。
こちらも、例題を通して3回ほど手を動かして解いてみましょう!
まとめ
・基本情報技術者試験でよく聞かれるのは、n進数の理解。
・2進数、8進数、10進数、16進数の理解と関係を理解することが重要
・16進数と10進数の基数変換は次の通り
整数部 | 小数部 | |
---|---|---|
10進数から16進数 | ①16で割り算・余を下から | ②16で掛け算・整数部を上から |
16進数から10進数 | ③16nで掛け算(nは桁が上がるごとに1ずつ増) | ④1/16nで掛け算(nは桁が下がるごとに1ずつ増える) |
・16進数と2進数の関係は、16進数は2進数の4桁分。
・基数変換は実際に紙とペンを用意して、手を動かして計算することで克服できる
この記事が参考になったら嬉しいです。
それでは、また次の記事でお会いしましょう!
-
前の記事
8進数について。2進数との関係が重要です。 2022.01.08
-
次の記事
2進数の引き算 コンピュータは足し算しか出来ない!? 2022.05.05