学生時代に勉強したけれど、2進数や16進数の進数変換がよく分からないという基本情報技術者試験対策をしている人向けに、進数変換の基礎知識をシェアします。
進数変換の基礎知識(スライド版)
情報技術者試験に向けて進数変換をしている後輩向けに、作ったスライドをSlideShareにアップロードしておいたので貼っておきます。
[slideshare id=206324637&doc=sin-191216132017]IT業界で使われるn進数
IT業界では、私たちが普段から使っている10進数以外にも2進数や16進数をよく利用します。現代では2進数を当たり前のように使われているコンピュータシステムですが、初期のコンピュータでは別の進数(進法)が用いられていました。
初期のコンピュータは10進数が使われていました。しかし、コンピュータを制御していく上で、10進数よりも通電状態のオンオフをそのまま利用できる2進法(2進数)の方が扱いやすいという理由から、コンピュータの世界では2進数が利用されるのが一般的になりました。
共通認識のための進数表記
今回は「1100」という数字を用いて、10進数、2進数、16進数でそれぞれどのように表記するのかをシェアします。
- 1100
- (1100)10
- 0d1100
10進数を表記する方法は一般的に使われている「1100」というシンプルな表記だけでなく、()で囲んで右側に10進数である旨を記述する方法、10進数表記を示す「0d」を最初に付与する方法の3種類があります。
0dという10進数表記に使われる「d」の文字はdecimalの頭文字を意味しています。
- (1100)2
- 0b1100
2進数も10進数と同じく()で囲んで右側に2進数である旨を記述する方法、2進数表記を示す「0b」を最初に付与する方法があります。「0b」のbはbinaryの頭文字を意味しています。
- (1100)16
- 0x1100
表記方法は2進数と同じく2種類。16進数では「0x」を付与します。この0xはhexadecimalの3つ目の文字を意味しています。
この16進数を意味する0xという表記は、Windowsのエラーメッセージで見かけることがあります。「0x00000070」のような感じにエラーが表示されるので、このエラーコードを検索して原因特定に活用できます。ちなみに、このエラーコードはERROR_DISK_FULL(ディスクの空き領域不足)を意味するエラーコードです。
n進数を10進数に変換
まずは、基本情報技術者試験でよく出題される2進数から10進数への変換、16進数から10進数への変換する計算方法を紹介します。
計算方法を文字で表現すると「m桁から成る2進数を10進数に変換するには、各桁の数値に2の(桁目-1)乗を掛けて足し合わせる」という事になります。
言葉で表現するとよく分からないのですが、表にしてみると分かりやすくなります。
実際に2進数の「1100」を10進数に変換する場合の計算式は次のようになります。
- 0b1100 = 1×(2の3乗)+ 1×(2の2乗)+ 0×(2の1乗)+ 0×(2の0乗)
- 0b1100 = 1×8 + 1×4 + 0×2 + 0×1
- 0b1100 = 8 + 4 + 0 + 0
- 0b1100 = 12
計算してみると、0b1100は10進数の12に該当することが分かります。
16進数も2進数と同じように変換することができます。文字で表現すると「m桁から成る16進数を10進数に変換するには、各桁の数値に16の(桁目-1)乗を掛けて足し合わせる」という事になります。
やっぱり分かりにくいですね。各桁目のー1乗を掛けるという点では2進数と同じ考え方です。
2進数と同じように16進数も1ステップずつ計算をしていきます。
- 0x1100 = 1×(16の3乗)+ 1×(16の2乗)+ 0×(16の1乗)+ 0×(16の0乗)
- 0x1100 = 1×4096 + 1×256 + 0×16 + 0×1
- 0x1100 = 4096 + 256 + 0 + 0
- 0x1100 = 4352
たった4桁の数字ですが、16進数なら10進数よりも大きな数字が扱えるという事が分かりますね。
10進数をn進数に変換
逆に10進数を2進数や16進数に変換する計算方法もあります。使うのは割り算。小学校で勉強した割り算です。
10進数の数字を変換したい進数で割り続けると解が得られます。この例では10進数を10進数で割り続けています。計算結果を矢印の順に見ていくと、余りの部分が元の2019になっていることが確認できます。
これと同じく、2進数なら2、16進数なら16で割り続けることで、10進数を変換したい進数にすることができます。
例えば、 10進数の2019を 2進数に変換すると、0111 1110 0011。
10進数の2019を 16進数にするなら、7E3です。計算方法2進数と同じ考え方で変換したい進数(16)で割り続けるだけ。
16進数に変換すると2進数に比べてグッと桁数が少なくシンプルになります。2進数表記で数字を覚えるのは難しいですが、16進数表記なら覚えられそう。
ぶっちゃけ、試験対策のために計算方法をしっておくことは大切ですが、実務レベルで考えると変換サイトをGoogleで検索した方が、100倍速いです。