U_OK_2023’s blog

主に日々のプログラミング学習についてのアウトプットと備忘録

【基本情報技術者】chaptser1-2【基数変換】

皆様、こんにちわ。

U_OK_2023 です。

本日も基本情報技術者の学習内容のアウトプットになります。

基数変換

ある基数で表した数値を、別の基数表現に置き換えること

例えば、10 という数字を表す時

10進数 2進数 8進数 16進数
10 1010 12 A

 

と表現できます。

これを、2進数 → 10進数に変換する、
逆に、10進数 → 2進数に変換する と いった操作が基数変換です。

 

基数変換には4つのパターンがある。

①n進数から10進数へ基数変換

②10進数からn進数への基数変換

③2進数から 8進数・16進数への基数変換

④8進数・16進数から 2進数への基数変換

①n進数から10進数へ基数変換

各桁の数字にその桁の重みを掛け算することで、10進数表記における値に変換できる。

2進数の「1101.001」という数値が10進数だといくつになるか

2進数 1 1 0 1 . 0 1 1
各桁(2進数)の重み 8 4 2 1 . 1/2(0.5) 1/4(0.25) 1/8(0.125)
各桁(2進数)の数に重みをかけた数を計算 8 4 0 1 . 0 0.25 0.125
上記の結果を全て足す 8 + 4 + 0 + 1 + . 0 + 0.25 + 0.125

8 + 4 + 0 + 1 . 0 + 0.25 + 0.125 = 13.375

計算結果より、
2進数「1101.001」を 10進数 に 変換すると「13.375」となる。

②10進数からn進数への基数変換(10進数(13.375)を 2進数へ基数変換)

方法1:重みを使う方法

2進数の重み

・・・ 16 8 4 2 1 . 1/2(0.5) 1/4(0.25) 1/8(0.125) 1/16(0.0625)  ・・・  

桁の重みを使って割り算していく。

13 を 割っていくので 重みの 8 からスタートする。

13.375 ÷ 8 = 1.671・・・

13.375 - 8 = 5.375

5.375 ÷ 4 = 1.34 ・・・

5.375 - 4 = 1.375

1.375 ÷ 2 = 0.6875

1.375 - 2 = 引けないのでスライドする

1.375 ÷ 1 = 1.3745

1.375 - 1 = 0.375

.

0.375 ÷ 0.5 = 0.75

0.379 - 0.5 = 引けないのでスライド

0.375 ÷ 0.25 = 1.5

0.375 - 0.25 = 0.125

0.125 ÷ 0.125 = 1

各桁の重み 8 4 2 1 . 1/2(0.5) 1/4(0.25) 1/8(0.125)
2進数 1 1 0 1 . 0 1 1

 

計算結果より、
10進数「13.375」を 2進数 に 変換すると「1101.011」となる。

方法2割り算と掛け算を使う方法

基数を使って
整数部は割り算」「小数部掛け算」する。

整数部

10進数を基数で割って、その商をまた基数で割るを繰り返す

小数部

小数部が 0 になるまで掛け算を繰り返す

10進数(13.375)整数部

13 ÷ 2 = 6 余り 1

6 ÷ 2 = 3 余り 0

3 ÷ 2 = 1 余り 1

1 ÷ 2 = 0 余り 1

.

10進数(13.375)小数部

0.375 × 2 = 0.75

0.75 × 2 = 1.5 ※ 1.5 の 1 は整数のため 次は、小数部の 0.5 を計算する

0.5 × 2 = 1.0

整数部から並べ直し、小数部から並べ直す

「1101」.「011」= 1101.011

計算結果より、
10進数「13.375」を 2進数 に 変換すると「1101.011」となる。

こちらの計算方法は、覚えてしまえば
重みを使わず手早く計算できるメリットがある。

2進数から 8進数・16進数への基数変換(2進数(1101.01)を変換)

8進数は 3ビット

16進数は 4ビット

2進数(1101.01)を 8進数へ変換

1101.01 を 3(ビット)ずつに分ける。

001 / 101 . 010 ※3桁にするためにないところは 0 を補う。

それぞれの桁に 3桁の整数部として扱い2進数の重み掛け算して合計する。

001 = 0 × 4 + 0 × 2 + 1 × 1 = 1

101 = 1 × 4 + 0 × 2 + 1 × 1 = 5

.

010 = 0 × 4 + 1 × 2 + 0 × 1 = 2 ※3桁の整数部として扱う

並べ直す

15.2

計算結果より、
2進数「1101.01」を 8進数 に 変換すると「15.2」となる。

③2進数(1101.01)を 16進数へ変換

1101.01 を 4(ビット)ずつに分ける。

1101.0100 ※4桁にするためにないところは 0 を補う。

それぞれの桁に 4桁の整数部として扱い2進数の重み掛け算して合計する。

1101 = 1 × 8 + 1 × 4 + 0 × 2 + 1 × 1 = 13

0100 = 0 × 8 + 1 × 4 + 0 × 2 + 0 × 1 = 4

並べ直す

13.4

13 は 16進数で表すと D になるので、

D.4

計算結果より、
2進数「1101.01」を 16進数 に 変換すると「D.4」となる。

④8進数・16進数から 2進数への基数変換

8進数(15.2)を 2進数へ変換

15.2 を 桁ごとに 3桁2進数に分解する。※3桁にするためにないところは 0 を補う。

1 = 1 = 001

5 = 101

.

2 = 10 = 010

並べる

001 101 . 010 = 1101.01

計算結果より、
8進数「15.2」を 2進数 に 変換すると「1101.01」となる。

16進数(D.4)を 2進数へ変換

D.4 を 桁ごとに 4桁 の 2進数に分解する。※4桁にするためにないところは 0 を補う。

D = 13 = 1101

.

4 = 100 = 0100

並べる

1101 . 0100 = 1101.01

計算結果より、
16進数「D.4」を 2進数 に 変換すると「1101.01」となる。

基数変換の方法4つは以上となります。

まとめ

①n進数から10進数へ基数変換

n進数の各桁の数字に n進数の重みを掛け算する。

②10進数からn進数への基数変換

方法1:

n進数の数字を n進数の重みの数字の多い方から 1 になるまで順に割っていく。

方法2:

n(基数)を使って「整数部は割り算」「小数部は掛け算」する。

「整数部は下から」「小数部は上から」整数部を並べ直す。

③2進数から 8進数・16進数への基数変換

2進数の数字を 0 を使って ビット数(8進数なら3, 16進数なら4)に分け、
分けた数字1桁ごとにそれぞれの桁に対応する 2進数の重みで掛け算し、
整数部と小数部をそれぞれ合計し、
並べ直す。

④8進数・16進数から 2進数への基数変換

それぞれの数字を 1桁ずつ 2進数に分解し、
0 を使って ビット数(8進数なら3, 16進数なら4)の数に合わせ、
並べ直す。

 

アウトプットは以上になります。

ありがとうございました。