2024年2月27日火曜日

10進数から2進数への変換方法

まずは、10進数と2進数の桁があがる瞬間に注目してみよう。

10進数の桁について

 10進数を数えてみる。

(1桁目)・・・0~9
(2桁目)・・・10~19,20~29,・・・・・・ 90~99
(3桁目)・・・100~199,200~299・・・・・・・,900~999

このようになる。
10進数の桁があがる様子は、1つの桁が9となった場合、桁上がりを起こしている。

10進数の桁があがった瞬間に注目

1 ・・・10^0
10 ・・・10^1
100 ・・・10^2
1000 ・・・10^3
10・・・・・・0 ・・・10^n

といったように桁上がりしている。

10進数の数の表し方(例)12345の場合

12345という数字は、単に1~5の数字の文字の並びとしてとることができる。
我々は、日常的に10進数で数字を扱っているため、
この12345という数字の並びを計算して「1万2千3百4十5」とであると理解している。

つまり、12345を見て、頭の中で次のように計算しているのである。

1*10^4+2*10^3+3*10^2+4*10^1+5*10^0

2進数の桁について

10進数を理解したので、2進数について考えてみる。

数えてみると

(1桁目) 00000
(1桁目) 00001
(2桁目) 00010
(2桁目) 00011
(3桁目) 00100
(3桁目) 00101
(3桁目) 00110
(3桁目) 00111
(4桁目) 01000

こうなる。
2進数の様子を見てみると、
全て規則的に0の次は、1となっている。

そして、今まで使用していた桁がすべて1で埋まった次は、
桁上がりを起こしていることがわかる。

2進数の桁があがった瞬間に注目

では、2進数の桁があがった瞬間つまり、1が1つの状態に注目してみる。
10進数では、いくつに該当するのだろうか。

00001・・・1(2^0)
00010・・・2(2^1)
00100・・・4(2^2)
01000・・・8(2^3)
10000・・・16(2^4)

確認してみると、すべて2^nとなっていることがわかる。

10進数の場合は、すべての桁が10^nであった。
2進数も同様に2^nである。

2進数の数の表し方(例)1010

1010という数字を考えてみる。
1つの桁がそれぞれ2^nであるので、10進数と同様に考えると

1010 = 1*2^3 + 0*2^2 + 1*2^1 + 0*2^0

ということだとわかる。

本題)10進数から2進数への変換方法

これまでのことから考えると
10進数の数字を頑張って、
2^n + 2^(n-1) + ・・・+2^1 + 2^0
で表せば変換できたことになる。

名付けて、「2^nいるかいらないかどっちでしょ~作戦」だ。

大きい数字から考えて、
元の数字を越えなければ、1、超えるならば0を答えていく方法だ。

例えば、23を考える

それぞれの桁をおさらいしておくと

2^0 = 1
2^1 = 2
2^2 = 4
2^3 = 8
2^4 = 16
2^5 = 32
2^6 = 64
・・・

では、23について考える。

2^6 は、23を超えるため、0
2^5 は、23を超えるため、0
2^4 は、23を超えないため、1

このとき、もとの23から2^4分を使用したため、

23 - 2^4
= 23 - 16
= 7

残った、7について考える。

2^3 は、7を超えるため、0
2^2 は、7を超えないため、1

このとき、7から2^2分を使用したため、

7 - 2^2 = 3

残った、3について考える。

2^1は、3を超えないため、1

このとき、2を使用したため
3 - 2 = 1

残った1について考える。

2^0 は、残った1なので1

今、計算した数字1と0を並べると

0010111

となる。

割り算で求める方法(例)25

もうお分かりだろう。
次の桁へは、2倍すればいいのである。
これは、元の数字を2で割れば、
今考えた、計算方法の手順を逆にたどることと同じである。

実際にやってみる。

 2) 25
   -----
 2) 12・・・1
 -----
 2)   6・・・0
 -----
 2)   3・・・0
   -----
 2)   1・・・1
   -----
 2)   0・・・1

・・・後の数字は、2で割ったときの余りを表している。
この余りを、下から読むことで、10進数から2進数へ変換ができる。

今回の25は、2進数で表すと11001ということになる。