2進数・8進数・16進数・10進数と変換方法

スポンサーリンク
スポンサーリンク
ライフスタイル関連のコンテンツ
お金 | 仕事 | 勉強 | プライベート | 健康 |
プログラミング関連のコンテンツ
C言語/C++入門 | Ruby入門 | Python入門 | プログラミング全般

2進数、8進数、16進数、10進数などの数字の考え方を知っておくと、プログラミングを行う上で役に立つ場合があります。
私たち人間が日常生活で使っているのは、10進数です。
コンピュータが扱うのは、1と0の組み合わせで表せる2進数となります。

スポンサーリンク

10進数(decimal number)

人間が得意とする数字です。
0から9までの10個の数字で表現し、10をかけると桁上がりします。

3582
という10進数の数字は・・・

3×10の3乗+5×10の2乗+8×10の1乗+2×10の0乗
= 3×1000+5×100+8×10+2×1
= 3582

とも表記できます。

/***************** 追記 ********************

上記の計算式の修正を行いました。(08.10.23)

= 3×1000+5×100+8×10+10×1 (修正前)
   ↓
= 3×1000+5×100+8×10+2×1 (修正後)

ご指摘いただきました、Tedさん、ありがとうございました。

*********************************************/

2進数(binary number)

コンピュータが得意とする数字です。
0と1の2個の数字で表現し、2をかけると桁上がりします。

1011
という2進数の数字は、2をかけると桁上がりしますから、左側から・・・
2の3乗の桁、2の2乗の桁、2の1乗の桁、2の0乗の桁、となります。

したがって、

1×2の3乗+0×2の2乗+1×2の1乗+1×2の0乗
= 1×8+0×4+1×2+1×1
= 11(10進数)

となり、2進数の1011は、10進数で表すと11となります。

逆に、10進数の11を2進数に変換するときは・・・

11 ÷ 2 = 5 … 1
5 ÷ 2 = 2 … 1
2 ÷ 2 = 1 … 0
1 ÷ 2 = 0 … 1

と、2で割っていき、余りを求め、余りを下から上へ並べます。
すると、1011となり、元の2進数に変換できました。

8進数(octal number)

0から7までの8個の数字で表現し、8をかけると桁上がりします。

2514
という8進数の数字は・・・

2×8の3乗+5×8の2乗+1×8の1乗+4×8の0乗
= 2×512+5×64+1×8+4×1
= 1024+320+8+4
= 1356(10進数)

8進数の2514は、10進数の1356に変換できます。
また、10進数の1356を8進数に変換する際には・・・

1356 ÷ 8 = 169 … 4
169 ÷ 8 = 21 … 1
21 ÷ 8 = 2 … 5
2 ÷ 8 = 0 … 2

となり、余りを下から並べると、2514と元の8進数の数字に戻せます。

16進数(hexadecimal number)

0から15までの16個の数字で表現し、16をかけると桁上がりします。
10~15までの数字は、便宜的にA~Fのアルファベットが割り当てられています。
つまり、実際の表記には・・・
0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,Fの15個の数字を用いることになり、Bは11に、Fは15に相当するわけです。

3E6F
という16進数の数字は・・・

3×16の3乗+E(14)×16の2乗+6×16の1乗+F(15)×16の0乗
= 3×4096+14×256+6×16+15×1
= 12288+3584+96+15
= 15983(10進数)

16進数の3E6Fは、10進数だと15983になります。
また、10進数の15983を16進数に変換するには・・・

15983 ÷ 16 = 998 … 15(F)
998 ÷ 16 = 62 … 6
62 ÷ 16 = 3 … 14(E)
3 ÷ 16 = 0 … 3

となり、余りを下から並べ替えしてみると、16進数の3E6Fと元の数字となりました。

2進数と8進数の変換

2進数と8進数の変換は、簡単です。

2進数の10101110で考えてみます。
8進数の場合、8=2の3乗ですので、3ビットずつに分けます。
2進数の10101110は、10, 101, 110と分類できます。

10 = 1×2の1乗+0×2の0乗 = 2
101 = 1×2の2乗+0×2の1乗+1×2の0乗 = 5
110 = 1×2の2乗+1×2の1乗+0×2の0乗 = 6

となり、2進数の10101110は、8進数の256に変換できます。

2進数と16進数の変換

2進数を16進数に変換する場合は、16=2の4乗ですので、4ビットずつに分けます。
2進数の10101110は、1010, 1110と分類できます。

1010 = 1×2の3乗+1×2の1乗 = 10(A)
1110 = 1×2の3乗+1×2の2乗+1×2の1乗 = 14(E)

となり、2進数の10101110は、16進数のAEへと変換できます。

表記方法

C++では、8進数や16進数を表記するために、特別な表記方法があります。
8進数の場合、頭に0を付けます。
0123は、8進数の123を表します。
16進数の場合、頭に0xをつけます。
0x15は、16進数の15を表します。

スポンサーリンク
 
スポンサーリンク