旧gaaamiiのブログ

間違ったことを書いている時があります。コメントやTwitter、ブコメなどでご指摘ください

2,8,16進数 基数変換

前回:2進数とコンピュータ -基本情報技術者試験-


例題

H22.秋 問1
16進小数3A.5Cを10進分数で表したものはどれか。
ア 939/16 イ 3735/64 ウ 14939/256 エ 14941/256

解説

2,8,16進数それぞれの数え方が分かれば簡単っぽいです。
僕らは普段、数の桁を数えるときに「いち、じゅう、ひゃく、せん、まん...」と数えます。しかし、10進数の100と2,8,16進数の100は表記は同じでも値は違うのです。1,10,100,1000の値を全て10進数の値に直すとこんな感じになります。

表記
1	10	100	1000	

2進数
1	2	4	8
8進数
1	8	64	512
16進数
1	16	256	4096

これが基数変換です。眺めていても分からないので練習をしましょう。
「16進数の100を10進数にすると?」
256
「8進数の1000を10進数にすると?」
512
「2進数の1001を10進数にすると?」
9
と言った具合に、パパっと答えられるようになりましょう。

補足:16進数は10以上の数字をアルファベットで補います。こんな感じ。
0,1,2,3,...,9,A,B,C,D,E,F

さて、問題に戻ります。

16進小数3A.5Cを10進分数で表したものはどれか。

3Aはいいとして、0.5Cはどうやって...。これも対応表があればすぐに解決します。
※見やすいように、今度は左を大きな桁にしています。

表記
1000		100	10	1	0.1	0.01

2進数
8		4	2	1	1/2	1/4
8進数
512		64	8	1	1/8	1/64
16進数
4096		256	16	1	1/16	1/256

うん、これで大丈夫です。慣れるまでは表と照らし合わせながらやっていけばいいでしょう。さあ、これで整数部分も小数部分もうまいこと基数変換ができるはずです。

手順

問題の基数変換は、少し丁寧めに書くとこんな手順です。

3Aを10進数にする

30 → 16 x 3 = 48
A →10
3A = 48 + 10= 58

0.5Cを10進数にする

0.5 → 1/16 x 5 → 5/16
0.0C → 1/256 x 12 → 3/64
0.5C = 23/64

整数部分と小数部分を足す

58 + 23/64
= 3735/64
よって、答えは

(次回) 2進数で引き算をしよう

少しややこしくなりますが、次回は2進数で「足し算だけで引き算をする」という何とも奇妙なお話をまとめます。