そもそも基数変換とは何か?
基数変換について簡単に解説します。
- 2進数と10進数
- 変換するのはどんな時か
- 桁の重みを乗算・合算
順番に見ていきましょう!
①2進数と10進数
基数変換とは、ある進数体系で表された数値を別の進数体系に変換することを指します。最も一般的なのが、2進数と10進数の変換です。2進数は0と1の2つの記号のみを使う進数体系で、コンピューターなどのデジタル機器で使われています。一方、10進数は0から9の10個の記号を使う進数体系で、人間が日常的に使っている進数体系です。
②変換するのはどんな時か
コンピュータでの演算結果を人間が読みやすい形式に変換したり、人間が入力した命令をコンピュータが扱えるデジタル形式に変換したりする場合に、基数変換が必要になります。例えば、マルウェアを解析する際に、2進数で表される機械語のコードは人間にとって非常に読みにくいため、逆コンパイルで人間が理解しやすい高水準言語に変換します。
③桁の重みを乗算・合算
桁の重みとは、各桁が表す値の大きさのことです。簡単に言うと『○○の位』がそのまま桁の重みを意味します。10進数では、右から『1の位』『10の位』『100の位』というように、10の累乗で桁の重みが決まりますが、2進数の場合は基数が2なので、右から『1の位』『2の位』『4の位』というように、2の累乗で桁の重みが決まっていきます。
2進数から10進数への変換方法
2進数から10進数へ変換する方法を、4パターンの例題を使って解説します。
- 整数を含む場合(0111)
- 小数を含む場合(0.111)
- 両方を含む場合(101.11)
- 2の補数表現(10101)
順番に見ていきましょう!
①整数を含む場合(0111)
まず2進数の各桁に『桁の重み』を掛けます。
- 4桁目:0×2の3乗 = 0
- 3桁目:1×2の2乗 = 4
- 2桁目:1×2の1乗 = 2
- 1桁目:1×2の0乗 = 1
次にすべての値を合算することで変換完了です。
- 0 + 4 + 2 + 1 = 7
よって2進数の0111を10進数に変換すると”7″になります。
②小数を含む場合(0.111)
まず2進数の各桁に『桁の重み』を掛けます。
小数点以下はそれぞれ2の-1乗、-2乗、-3乗になるので
- 1桁目:0×2の0乗 = 0
- 小数第1位:1×1/2 = 0.5
- 小数第2位:1×1/4 = 0.25
- 小数第3位:1×1/8 = 0.125
次にすべての値を合算することで変換完了です。
- 0 + 0.5 + 0.25 + 0.125 = 0.875
よって2進数の0.111を10進数に変換すると”0.875″になります。
③両方を含む場合(101.11)
先ほど紹介した方法で各桁に『桁の重み』を掛けます。
- 3桁目:1×2の2乗 = 4
- 2桁目:0×2の1乗 = 0
- 1桁目:1×2の0乗 = 1
- 小数第1位:1×1/2乗 = 0.5
- 小数第2位:1×1/4乗 = 0.25
次にすべての値を合算することで変換完了です。
- 4 + 0 + 1 + 0.5 + 0.25 = 5.75
よって2進数の101.11を10進数に変換すると”5.75″になります。
④2の補数表現(10101)
2の補数とは、元の値と合算したときに、桁が1つ上がる数値の中で最小のモノを指します。
最上位ビット(最左桁)が符号ビットとなり、0なら正の値、1なら負の値を表現します。
まず2の補数表現の各桁を全て反転し、1を加えます。
- 10101 → 01010
- 01010 + 1 = 01011
得られた値を10進数に直し、符号をマイナスにします。
- 01011 → 11(10進数)
- 11にマイナス符号 → -11
よって2の補数表現10101を10進数に変換すると”-11″になります。
10進数から2進数への変換方法
逆に10進数から2進数へ変換するには以下のステップを踏みます。
- 10進数を2で除算する
- 商が0になるまで余りを求める
- 求めた余りを下から順に並べる
10進数”155″を例に挙げて変換するなら
- 155 ÷ 2 = 77 余り 1
- 77 ÷ 2 = 38 余り 1
- 38 ÷ 2 = 19 余り 0
- 19 ÷ 2 = 9 余り 1
- 9 ÷ 2 = 4 余り 1
- 4 ÷ 2 = 2 余り 0
- 2 ÷ 2 = 1 余り 0
- 1 ÷ 2 = 0 余り 1
となるので、答えは”10011011″になります。
コメント