【図解】10進数から16進数への変換方法!医療情報技師試験の過去問で学ぶ基数変換

はじめに

先日受験した医療情報技師試験ですが、自己採点の結果、無事に合格ラインをクリアできている見込みです! ただ、「情報処理技術」の科目でいくつか悔しい間違いをしてしまいました。10月に控える基本情報技術者試験(FE)に向けて、間違えた問題を「一記事一問」のスタイルで徹底的に深掘りし、知識を完璧に定着させていきたいと思います。

記念すべき第1回は、ITの超基本である「基数変換(10進数→16進数)」です。

実際に出題された問題と私のつまずき

【第24回 情報処理技術系 問1】

10進数「182」を16進数に変換したのはどれか。

  1. 91
  2. AD
  3. B6
  4. F2
  5. 116

正解は「3) B6」なのですが、私は本番で焦ってしまい、計算用紙に色々書き込んだ末に間違えてしまいました。16で割る計算自体はできても、「出た余りを正しくアルファベット(A〜F)に変換する」という最後の詰めでミスが起きやすいのがこの問題の罠です。

【図解】10進数から16進数へ変換する3ステップ

確実にとけるように、ルールを改めて整理します。鉄則は「商が0になるまで16で割り続け、余りを下から上へ拾う」ことです。

ステップ1:16で割って余りを出す

  • 182 ÷ 16 = 11 ・・・ 余り 6
  • 11 ÷ 16 = 0 ・・・ 余り 11

商が0になったので計算はここまで。余りを下から拾うと「11」と「6」になります。

ステップ2:10以上の数字をアルファベットに変換する 16進数は「0〜9」までの数字と「A〜F」のアルファベットを使います。 (A=10, B=11, C=12, D=13, E=14, F=15)

今回、余りの一つが「11」なので、これを「B」に変換します。

ステップ3:下から順にくっつける 下から拾い上げた「B」と「6」をくっつけて、答えは B6 となります。

1. まずは全体像!基数変換の対応表(0〜15)

2進数、8進数、16進数はすべて「2の累乗(2の仲間)」です。コンピューターが処理する長い長い2進数を、人間が見やすく短くまとめるために8進数や16進数が存在します。

10進数(普段の数)2進数(マシンの言葉)8進数(3桁まとめ)16進数(4桁まとめ)
0000000
1000111
2001022
3001133
4010044
5010155
6011066
7011177
81000108
91001119
10101012A
11101113B
12110014C
13110115D
14111016E
15111117F

2. 10進数を中心とした変換(基本ルート)

私たちが普段使っている10進数を基準にする場合、ルールは「割る」か「掛ける」の2択です。

① 10進数 → N進数にする(割り算ルート)

変換したい進数(N)で、商が0になるまで割り続け、余りを下から上へ拾います。

  • 10進数 → 2進数: 2で割り続ける
  • 10進数 → 8進数: 8で割り続ける
  • 10進数 → 16進数: 16で割り続ける(余りが10〜15になったらA〜Fに変換!)

② N進数 → 10進数にする(掛け算ルート)

各桁に「重み(Nの累乗)」を掛けて、すべて足し合わせます。右端から「1、N、Nの2乗、Nの3乗…」となります。

  • 2進数 → 10進数: 各桁に右から 1, 2, 4, 8, 16... を掛けて足す
  • 8進数 → 10進数: 各桁に右から 1, 8, 64, 512... を掛けて足す
  • 16進数 → 10進数: 各桁に右から 1, 16, 256, 4096... を掛けて足す(A〜Fは10〜15に戻して計算!)

3. 2・8・16進数同士の変換(ショートカットルート)

ここがFE試験でも一番の時短テクニックになる部分です。2、8、16進数は「2の仲間」なので、わざわざ10進数を経由しなくても、「桁を区切るだけ」で一瞬で変換できます。

① 2進数 ⇄ 8進数(3桁区切り)

8は「2の3乗」なので、2進数の「3桁」が8進数の「1桁」にピッタリ対応します。

例:2進数 101011 を 8進数にする

  1. 右から3桁ずつ区切る → 101011
  2. それぞれを10進数っぽく読む → 101は「5」、011は「3」
  3. くっつける → 8進数の 53

② 2進数 ⇄ 16進数(4桁区切り)

16は「2の4乗」なので、2進数の「4桁」が16進数の「1桁」にピッタリ対応します。

例:2進数 10101111 を 16進数にする

  1. 右から4桁ずつ区切る → 10101111
  2. それぞれを読む → 1010は「10(A)」、1111は「15(F)」
  3. くっつける → 16進数の AF

③ 8進数 ⇄ 16進数(2進数経由が最強)

8進数から16進数(またはその逆)に直接変換しようとすると頭が混乱します。「一旦2進数にバラしてから、区切り直す」のが一番ミスがなくスピーディです。

例:8進数 75 を 16進数にする

  1. 3桁の2進数にバラす → 71115101 → 繋げて 111101
  2. 右から4桁で区切り直す → 111101
  3. 16進数で読む → 11(3)1101(D) → 16進数の 3D

このように「グループ」で理解しておくと、基本情報のアルゴリズム問題でシフト演算(ビットを左右に動かす処理)などが出てきたときにも、頭の中で数字がどう動いているのかイメージしやすくなります。

【開発者視点のひとこと】 現在学習しているJavaScriptを使えば、実は (182).toString(16) と1行書くだけで、裏側で勝手に b6 と計算してくれます。Webアプリで色を指定するカラーコード(#FFFFFFなど)でおなじみですね。 ただ、10月の基本情報(FE)の科目Bでアルゴリズムを読み解くには、こうした「裏側でコンピューターがどんな計算をしているか」の仕組みを理解しておくことが非常に重要になります!

コメント

タイトルとURLをコピーしました