2進数、16進数

コンピュータが扱う数値表現
通常、私たちが使っている数値表現は10進数です。10進数は0〜9の数字を使って一桁を表現しています。10で桁上がりするのが10進数ですね。人間の指は10本あるので、この10進数の考え方はわかりやすいです。

しかしコンピュータでは、すべてのデータを電流が流れているか流れていないかという2種類の状態で表現します。つまり、0か1というわけですね。この0か1で表現する考え方が2進数です。10進数は10で桁上がりするのですが、2進数は2で桁上がりします。0 , 1 , 10,11,110・・・という具合に桁が上がっていきます。

コンピュータでは2進数で処理をしているのですが、大きな数を表すには桁がとても多くなってしまいます。そこで2進数の4桁を1つにまとめた表現方法として、16進数を利用しています。2進数で4桁は2^4=16となるので16進数というわけです。10進数、2進数と同じように16で桁上がりしていく数え方です。ただ、数字は0〜9までしかありません。そこでアルファベットを使って数値を表します。10=A,11=B,12=C,13=D,14=E,15=Fです。AとかBとかも数字として考えるんですねぇ、16進数では・・・

10進数、2進数、16進数の対応をまとめると次のようになります。

2進数 10進数 16進数
10
11
100
101
110
111
1000
1001
1010 10
1011 11
1100 12
1101 13
1110 14
1111 15
10000 16 10


変換の仕方(10進数への変換)
すべての数の表現の仕方について、共通のルールがあります。それは各桁の「重み」です。たとえば、10進数で次の数字を考えます。

4567
4は1000の位、5は100の位、6は10の位、7は1の位なので分解すると、

4×1000 + 5×100 + 6×10 + 7×1
=4×10^3 + 5×10^2 + 6×10^1 + 7×10^0

となります。この10^3,10^2,10^1,10^0が10進数の各桁の重みになっています。10進数なので10の累乗です。2進数なら2の累乗、16進数なら16の累乗が各桁の重みです。

つまり、2進数で「1110」は次のように考えることができます。

1110
=1×2^3 + 1×2^2 + 1×2^1 + 0×2^0

このように分解して考えると、2進数から10進数に簡単に変換することができます。

1110 = 1×2^3 + 1×2^2 + 1×2^1 + 0×2^0
= 1×8 + 1×4 + 1×2 + 0×1
= 14

16進数でも同様です。16進数で「1AD」なら、次のように分解でき10進数に変換すると、

1AD = 1×16^2 + A×16^1 + D
= 1×256 + 10×16 + 13
= 429
になります。

これは何も2,10,16進数だけとは限りません。4進数だろうが、8進数だろうが、9進数だろうが基本は同じです。一般に、
n進数とは各桁の値(その値の範囲は0〜(n-1))にnの累乗の重みをかけて足し合わせたものとして表現することができます。

※よく使う2進数
10000000(2)=128(10)
11000000(2)=192(10)
11100000(2)=224(10)
11110000(2)=240(10)
11111000(2)=248(10)
11111100(2)=252(10)
11111110(2)=254(10)
11111111(2)=255(10)
これはサブネットマスクの計算のときによくでてきます。


10進数からの変換
10進数から2進数への変換
10進数から2進数へ変換するには、変換対象の10進数を2で割って、その商をさらに2で割る、またその商を2で割って・・・これを商が2で割れなくなるまで繰り返し、最後の商を先頭にして、あまりを並べていきます。
たとえば、100を2進数で表現するには、

100÷2=50 あまり 0
50÷2=25 あまり 0
25÷2=12 あまり 1
12÷2=6 あまり 0
6÷2=3 あまり 0
3÷2=1 あまり 1

と最後の商が1で、もうこれ以上2で割ることはできません。そこで、この商を先頭にして、各あまりを並べていきます。すると100は2進数では、次のようになります。

100(10)=1100100(2)

※(10)は10進数、(2)は2進数を示します


10進数から16進数の変換
10進数から16進数の変換も基本的には同じです。割る数が16になるくらいです。

100÷16=6 あまり 4

とここでもうこれ以上商を16で割ることができません。この商を先頭にしてあまりを並べると

100(10)=64(16)

となります。
また、10進数で300であれば、

300÷16=18 あまり 12(=C)
18÷16=1 あまり 2

と、ここで商をこれ以上16で割ることができません。この商を先頭にしてあまりを並べていくと

300(10)=12C

※12は16進数でC

というように変換することができます。


2進数、16進数の変換
16進数は2進数の4桁をひとつにまとめたものと考えることができるので、2進数から16進数の変換は4桁ごとに変換していくと簡単です。
たとえば、

111100010 であれば

0001 1110 0010
※最初の「0」3つは、4桁にそろえるため

というように4桁ごとに区切ります。この4桁ごと16進数に直していくと、

0001(2)=1(16)
1110(2)=E(16)
0010(2)=2(16)

となるので、

000111100010(2)=1E2(16)

と変換することができます。
16進数から2進数も簡単に変換することができます。次の例を考えましょう。

E2A(16)であれば、

E(16)=1110(2)
2(16)=0010(2)
A(16)=1010(2)

なので、

E2A(16)=111000101010(2)

と変換できます。

こういった変換は、めんどくさいので電卓でやってしまえばいいのですが、一応理屈だけはわかっていた方がいいですね。







(C) Copyright 2000 Gene All Right Reserved