毎日ゲーム生活

プログラミング・ゲーム他気になったことを書いていくブログ

数学 n進法を理解する 基数変換

目的:基数変換をできるようになる。

n進法とは?

世の中にはn進法という言葉があります。

このnには数字が入り、この数字になったら桁があがるよってことを示している数字です。

例えば私達が普段から使い慣れているのは10進法です。0~9という10個の数字を使って表しています。

1円玉が10枚になると10円、10円玉が10枚になると100円、、、

とこのように1の位、10の位のように10倍ごとに桁を増やしていく数を表します。

 

実は10進法以外にも日常で使っているものがあります。

例えば時間には60進法が使われています。1時間は60分ですよね。

その他にも日数の7進法などたくさんあります。気になったら調べてみてください。

 

情報処理でよく使われるのは2・8・16進法です。

今回は、2進法・16進法の2つについて説明します。

基数変換を説明する前に

2進法・16進法って?

2進法は0,1の2つの数字を使って数を表現します。

16進法は0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,Fの16つの数字を使って数を表現します。

 

基数と桁の重み

n進法には基数という概念があります。基数とはn進法のnのことです。

つまり、2進法なら「2」、16進法なら「16」が基数となります。

例として10進法の数値から4321を見ていきます。

1桁目:10^0×1 = 1

2桁目:10^1×2 = 20

3桁目:10^2×3 = 300

4桁目:10^4×4 = 400

このように10^◯のことをn進法が持つ各桁の桁の重みといいます。

各桁ごとに(10の(桁数-1)乗)を計算した数値のことです。

10進法で小数を表すときには「10^-1」「10^-2」という重みを使います。

 基数変換

基数変換とはある基数で示された数値を別の基数における数値に変換することを基数変換といいます。

今回は「各基数の桁の重み」を使って基数変換していきます。

n進法を10進法に変換

 n進法を10進法に変換するには各桁の重みをかけることで10進法での数値が求められる。 

2進法:1011.011 → 10進法に変換

f:id:Ya-kon:20191108161735p:plain

 1×2^3 + 0×2^2 + 1×2^1 + 1×2^0 + 0×2^-1 + 1×2^-2 + 1×2^-3

=11.375となります。

10進法をn進法に変換

10進法をn進法に変換するには桁の重みを使って変換する方法と

基数を利用して整数部分割り算小数部分はかけ算をして変換する方法があります。

今回は後者のかけ算わり算の変換の方法で行います。

整数部分:10進法を基数で割ってその商をさらに基数で割るを繰り返して求める。

小数部分:小数部分が0になるまで掛け算を繰り返して求める。

10進法:11.375 → 2進法に変換

11÷2 = 5・・・1,  5÷2 = 2・・・1, 2÷2 = 1・・・0, 1÷2 = 0・・・1  商が0になったのでストップ

整数部分は割った余りを下から並べ直せば基数変換後の値を求めることができます。

なので整数部分の変換後の値は1011となります。

2×0.375 = 0.75, 2×0.75 = 1.5, 2×0.5 = 1.0  小数部分が0になったのでストップ

小数部分は掛け算した結果の整数部分をかけた順位並べると基数変換後の値を求めることができます。なので小数部分の変換後の値は011となります。

結果.1011.011となります。

2進法を16進法に変換

 2進法を16進法にするには2進法を4桁に分けます。(書かれてない桁は0を補う)

そうすれば分けた1桁が16進法の1桁あたります。

2進法:1001.10 → 16進法に変換

4桁に分ける→ 1001.1000となります。この4桁の区切りで10進法に変換します。

1001 = 1×2^3 + 0×2^2 + 0×2^1 + 1×2^0 = 9

1000 = 1×2^3 + 0×2^0 + 0×2^0 + 0×2^0 = 8

上記の数値を16進数に直すと9.8になります。

※16進法は9の次にA~Fと続くので16進法に直すときは中止しよう。

16進法を2進法に変換

16進法を2進法にするには16進法の1桁を2進法の4桁に分解すれば求めれます。

16進法:C.7 → 2進法に変換

2進法の4桁に分解→ 1100.1110となります。この数値の余分な0を取り除いて

答えは1100.111です。

まとめ

基数変換についてざっと説明しました。何か間違いがあればおしえてください。