PRIMG0001
 毎週金曜日、プログラミングのちょっとした講座を記しています。
 ここでは、小学校から「プログラミング」が必須項目になってしまったため、お父さん・お母さん・おじいちゃん・おねえちゃんが子供に「プログラミング」教えることができるように、ここでこっそりと勉強してしまおうという企画です。
 今週も「進数」について説明していきます。
この説明内容は本家0から楽しむパソコン講座のHPからそのまま引用します。


私たちが使用している10進数と2進数の変換は難しいように思われますが、数の数え方の方法の違いだけで、基本は一緒です。
2進数の世界はデジタル機器の世界に直結する反面、これを表記した時はとてつもない桁数を使用します。このため、これを簡略化するために「8進数」や「16進数」といった数え方に変換します。
なぜ、「8進数」や「16進数」に変換するのかというと、8や16は2の乗数であり、2進数からの変換が容易であるためです。
それでは2進数・8進数・10進数・16進数への相互変換の方法を説明いたしましょう。

10進数と2進数の相互変換
  まずは8進数、16進数を覚える前に、10進数を2進数に変換する計算方法を説明いたしましょう。
10進数を2進数に変換する場合は2で割り算を行い、余りを求めます。

たとえば10進数で35の場合、

35÷2=17あまり1
17÷2=8 あまり1
8 ÷2=4 あまり0
4 ÷2=2 あまり0
2 ÷2=1 あまり0
1 ÷2=0 あまり1

この余りを最初に割った余りから順番に並べます(右から左へ)
結果、35の2進数は100011となります。

2進数から10進数に変換する場合、1が立っている桁を2の(桁-1)乗を掛けてやり、全部足していきます。

たとえば2進数で110001の場合、

2の(6-1)乗+2の(5-1)乗+2の(1-1)乗=32+16+1=49

となります。
小さい位から 1、1の2倍2、2の2倍4、4の2倍8、8の2倍16、16の2倍32、32の2倍64...と覚えたほうが簡単かもしれません。


2進数と8進数の相互変換
 情報機器の内部ではこのように2進数が使われていますが、2進数を扱う場合桁数が多いため情報の記載が面倒になります。そのため、2進数を8進数や16進数に変換して記載することがあります。 8進数の場合、3ビットごとに1つのブロックにします。2進数110の場合は8進数で6となります。(10進数の変換と同じ考えです。) 2進数で110111の場合、110と111で分けます。110は6、111は7となりますので、2進数110111=8進数67となります

 

2進数と16進数の相互変換
 16進数の場合、4ビットごとに1つのブロックで分けて同様に計算しますが、10進数で10になった場合、16進数では「A」と表記します。11だと「B」というように、1、2..9、A、B、C、D、E、Fとなります。

2進数で1110と場合、10進数では14となりますが、16進数の場合は「E」となります。
2進数で11011011の場合1101=10進数13=16進数D、1011は10進数11=16進数Bとなるため11011011=16進数「DB」となります。

下の表は10進数・2進数・8進数・16進数の相互表です。


2進数、8進数、10進数、16進数の表記方法
 2進数、8進数、10進数、16進数を区別するための表記があります。これはプログラムなどで進数表記が混在する場合によく使われます。

2進数の場合、末尾に「b」を付けて「1001b」と表記します。
8進数の場合、頭に「0(数字のゼロ)と付けて「052」と表記します
10進数の場合、末尾に「d」を付けて「95d」と表記します。
16進数の場合は、頭に「0x」を付けて「0xFF00」と表記したり、末尾に「h」を付けて「FF00h」と表記します。


なぜ8進数の頭に0を付けるのか

 8進数を表記するとき、頭に「0」を付けて表記しますが、「まぎわらしい」「なぜ頭に0?」と思いませんか?
この謎を解くには、まずなぜ「8進数」を使用していたという所から始まります。
昔のコンピュータのCPUの処理のビット数は現在の「4の倍数」ではなく「3の倍数」でした。そのため12ビットや15ビット機なども数多く存在していました。
そのため昔は16ビットではなく8ビットが主流だったわけです。
プログラム上で8進数と16進数の区別を付けるために「Octal」の頭の1文字を取って「O(オー)」を付けるという案が出ました。しかし、頭に「O(オー)」が出た場合、その次は英字か数字か分かりません。先頭が「O(オー)」の単語はいくつもあります。
そこで「O(オー)」に似た「0(ゼロ)」を頭に付けよう。しかも10進数では普通は頭に「0(ゼロ)がつかないため一石二鳥となり、現在の頭に「0(ゼロ)を付けたと言われています。

 今回の講座はここまでとなります。なお、明日の更新は都合により休みにさせていただきます。