- # C言語/C++入門 > 配列・文字列・数値と型
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を表します。
- - 関連記事 -
- 修飾子
- 定数と参照型の宣言・&
- 整数型・int
- CとC++文字列の変換、違い
- 文字列関数/文字列のコピー・連結
- Cの文字列とC++の文字列コピー
- assert文で配列要素の範囲外エラーを防ぐ
- 変数の初期化
- 文字列の入力・std::cin
- データ出力と入力/std::coutとstd::cin
- 文字列の宣言(std::string)と操作
- 配列の宣言