矢沢久雄

 2進数で表された数は,10進数に比べて桁数が格段に多くなります。0101 1100 1111 0000のように16桁にもなったら,この原稿に打ち込むだけでも面倒です。そんな場合に,いい方法があります。16進数を使うのです。2進数を16進数に変換すると桁数が4分の1になります。変換方法はとても簡単なので,通常は16進数で表記しておいても,すぐに2進数に変換できます。16進数は便利なのです。

●16進数の仕組み

 16進数とは,16で桁上がりする数の数え方です。すなわち,

0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,10

のようにF(10進数で15)まで数えて,次に10と桁上がりするわけです。16進数では,10進数の15までを1桁で数えるので,A~Fという記号を数を表すものとして使います。16進数の10は,2進数と同様に「いち・ぜろ」と読みます。16進数の桁は,1桁上がるごとに16倍されます。だから16進数なのです。逆に桁が下がれば,16分の1になります。このあたりの考え方は,10進数や2進数と同様です。

 16進数は,2進数の代用としてよく使われます。16進数と2進数は相互に変換が容易です。16進数の1桁が2進数の4桁にピッタリ一致するからです。その理由が分かりますか?2進数の4桁は2倍を4回分ですから,

2進数の4桁=2倍×2倍×2倍×2倍=16倍=16進数の1桁

になるからです。

図1●1バイトを2桁の16進数で表すダンププログラム
 2進数の代用として16進数が使われる実例をお見せしましょう。図1[拡大表示]は,ファイルの内容を1バイト(8ビット)ずつ数値で表すプログラムです。このようなプログラムを「ダンプ・プログラム」と呼びます。1バイトは2進数で8桁となり,分かりにくいのですが,16進数なら1バイトを2桁で表せます。これなら分かりやすいですね。

●2進数から16進数への変換

 2進数を16進数に変換するのは,とても簡単です。2進数を下位桁から4桁ずつに分け,それを1桁の16進数にすればよいのです。図2[拡大表示]を参考にして,皆さんもやってみてください。

 4桁の2進数を16進数にするには,重みを掛けて足せばよいのです。結果が10以上になったらA~Fで表すのです。4桁までなら2進数の重みをすぐに言えますね。下位桁から「1,2,4,8」です。これを「いち・に・よん・ぱ~」と覚える人もいます。

図2●2進数の4桁=16進数の1桁
 4桁の2進数を1桁の16進数に変換する練習をしてみましょう。0111なら,0×8+1×4+1×2+1×1=7です。1001なら,1×8+0×4+0×2+1×1=9です。1111なら,1×8+1×4+2×1+1×1=15ですが,15はFと表します。

 桁の重みを掛けて足すとは言っても,「いち・に・よん・ぱ~」に1または0を掛けて足すだけなので,4桁の2進数は「いち・に・よん・ぱ~」の4種類の数を組み合わせて足したものとなります。慣れてくると「1010は8+2=10だから16進数でA」のように暗算で変換できるようになります。

●16進数から2進数への変換

図3●16進数の1桁=2進数の4桁
 16進数を2進数に変換するのも,とても簡単です。16進数の1桁を4桁の2進数に変換し,それを並べればよいのです。一つだけ注意すべきことがあります。それは,110のように4桁に満たない2進数になった場合でも,上位桁に0を置き4桁に揃えるということです。図3[拡大表示]を参考にして,皆さんもやってみてください。

 16進数の6や5を4桁の2進数に変換するのも暗算でできるようになってください。6は「いち・に・よん・ぱ~」の4+2です。したがって6は0110となります。5は4+1なので,0101となります。簡単ですね!

 さてさて,皆さんは「16進数では,どうやってマイナスの数や小数点数を表現するのだろうか?」と思われているかもしれませんね。その答えは,2進数と同じです。と言うよりは,2進数の桁数を少なくする表現手段が16進数なのです。補数表現の2進数があったとしましょう。それを4桁ずつ16進数に変換すれば,補数表現の16進数です。浮動小数点数形式の2進数があったとしましょう。それを4桁ずつ16進数に変換すれば,浮動小数点数形式の16進数です。16進数は2進数と同じものだと考えてください。

 2進数をテーマとした連載は,今回で最終回です。2進数も16進数もバッチリ,マスターできましたね。理屈がわかれば,暗記することなど一つもなかったはずです。コンピュータはとても単純なものだからです。どうか単純なコンピュータと友達になってあげてください。

 末筆になりましたが,連載をお読みいただいた皆さんが,ますますコンピュータ・ライフを満喫されることをお祈り申し上げます。またお会いしましょう!