[PR] この広告は3ヶ月以上更新がないため表示されています。
ホームページを更新後24時間以内に表示されなくなります。
![]() |
▲世界最初の「バグ」 |
私たちが普段数を数えるときに1.2.3.4.5.6.7.8.9.10と数えますよね。なんで1.2.3.4....と数えるの?と言うと、「小さいときに教えてもらった」「この数え方があたりまえでしょう」というでしょう。
それはその通り正解!!!です。
しかし、身近な生活の場においてこの数え方が違うものがあります。
例えば、時間を数えるとき、60秒になったら1分になります。60分になったら1時間になります。24時間になったら1日になります。これは当たり前ですよね、しかし、通常使用している10までの数え方の法則にはなっていません。60分で繰り上げで単位が変わるというのは変ではないですか?
また鉛筆を数えるとき、12本で1ダースと数えます。
このように、必ずしも普段の数え方の法則ではないのもあります。実際、この数え方は小さい時から教わって無意識のうちに使っているため、変に思わないでしょうが、通常の数え方とはちょっと違います。
私たちが通常1.2.3.4.5.6.7.8.9.10と使っている数え方は10進法と言います。一桁目が10個目に達した時位が上がり、一桁目がリセット(0になる)されます。
時間の場合、デジタル表記だと0~59まで表記されるためちょっと分かりにくいですが、アナログ表記で見た場合、60秒や60分に針が来た場合、別の針が1個進み、元の針は0に戻ります。
そのため秒や分は60進数で行われており、同様に時間は24進数となります。
本来、古代の文明では時間の表記は60通りの文字があり、それを使って位を上げていたそうですが、現在は記載が非常にややこしくなるため、あえて10進表で表記しながら60進法を採用しています。
このように、「N」個目で位が上がり、下の位がリセットされる数え方を「N」進数と言います。
![]() |
▲数の数え方にもいろいろあろます。 |
![]() |
▲ビット(Bit)・バイト(Byte)の説明図 ビットは1つのON・OFFの回路です。 |
まずは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進数と10進数の相互表になります。
10進数 | 2進数 | 10進数 | 2進数 | 10進数 | 2進数 | 10進数 | 2進数 | |||
1 | 1 | 21 | 10101 | 41 | 101001 | 61 | 111101 | |||
2 | 10 | 22 | 10110 | 42 | 101010 | 62 | 111110 | |||
3 | 11 | 23 | 10111 | 43 | 101011 | 63 | 111111 | |||
4 | 100 | 24 | 11000 | 44 | 101100 | 64 | 1000000 | |||
5 | 101 | 25 | 11001 | 45 | 101101 | 65 | 1000001 | |||
6 | 110 | 26 | 11010 | 46 | 101110 | 66 | 1000010 | |||
7 | 111 | 27 | 11011 | 47 | 101111 | 67 | 1000011 | |||
8 | 1000 | 28 | 11100 | 48 | 110000 | 68 | 1000100 | |||
9 | 1001 | 29 | 11101 | 49 | 110001 | 69 | 1000101 | |||
10 | 1010 | 30 | 11110 | 50 | 110010 | 70 | 1000110 | |||
11 | 1011 | 31 | 11111 | 51 | 110011 | 71 | 1000111 | |||
12 | 1100 | 32 | 100000 | 52 | 110100 | 72 | 1001000 | |||
13 | 1101 | 33 | 100001 | 53 | 110101 | 73 | 1001001 | |||
14 | 1110 | 34 | 100010 | 54 | 110110 | 74 | 1001010 | |||
15 | 1111 | 35 | 100011 | 55 | 110111 | 75 | 1001011 | |||
16 | 10000 | 36 | 100100 | 56 | 111000 | 76 | 1001100 | |||
17 | 10001 | 37 | 100101 | 57 | 111001 | 77 | 1001101 | |||
18 | 10010 | 38 | 100110 | 58 | 111010 | 78 | 1001110 | |||
19 | 10011 | 39 | 100111 | 59 | 111011 | 79 | 1001111 | |||
20 | 10100 | 40 | 101000 | 60 | 111100 | 80 | 1010000 |
情報機器の内部ではこのように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となります
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進数の相互表です。
10進数 | 2進数 | 8進数 | 16進数 |
1 | 1 | 01 | 1 |
2 | 10 | 02 | 2 |
3 | 11 | 03 | 3 |
4 | 100 | 04 | 4 |
5 | 101 | 05 | 5 |
6 | 110 | 06 | 6 |
7 | 111 | 07 | 7 |
8 | 1000 | 010 | 8 |
9 | 1001 | 011 | 9 |
10 | 1010 | 012 | A |
11 | 1011 | 013 | B |
12 | 1100 | 014 | C |
13 | 1101 | 015 | D |
14 | 1110 | 016 | E |
15 | 1111 | 017 | F |
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(ゼロ)を付けたと言われています。
最後の進数変換器を載せますので試してみてください。