Excelで二進法に変換する

今回はExcelで簡単に二進法を求める方法をまとめる。

今回は13.45を二進法で表示する。

まず、整数部分と小数部分で計算方法が異なるのでそれぞれ分けて計算する。

整数部分

対象の数字を2で割り、得た余りを記録。
次にその計算で得られた商をまた2で割り、余りを記録。
を、商が0になるまで続ける。

最後の余り = 一番多く2で割った余り

なので、最後の余りから順に桁の上(左から)並べれば二進法の表示になる。

Excel表示:整数部分

今回は13を二進法で表す。

13を2で割ると商は6、余りは1
13を割って得た商6をまた2で割ると商は3、余りは0。
商3を割ると商は1、余りは1。
商1を割ると商は0、余りは1。
これをExcelで表すと下記になる。

左から対象の十進法の数字、商、余りを取り、次はここで得た商を次の十進法の数字として同じ事を繰り返す。
得た余りを、最後の余りから順に桁の上(左から)並べれば二進法の表示になる。

Excelの設定:整数部分

それぞれのExcelの式は下記の通り。
左上のセルがA1。

最初は求める十進法の数字から始まり、2で割った商をQUOTIENT(数, 2)で、余りをmod(数, 2)で求める。ここで得た商をまた2で割って余りを求める。
これを商が0(1または0を2で割った場合の商)になるまで続けて、下から並べると求める二進法が得られる。

小数部分

2の-x乗、例えば2の-1乗(=0.5)、-2乗(=0.25)、-3乗(=0.125)…で割った商を記録。

2の-1乗から順番に小数点第1位、第2位、第3位と並べていくと二進法の表示になる。

Excelの表示:小数部分

今回は前エントリと同じ0.45を二進法で表す。

0.45を0.5(2の-1乗)で割ると、商は0、余りは0.45。
余り0.45を0.25(2の-2乗)で割ると、商は1、余りは0.2。
余り0.2を0.125(2の-3乗)で割ると、商は1、余りは0.075。
これをExcelで表すと下記の通り。

左から対象の十進法の数字、商、余りを取る。
ここまでは整数部分と同じだが、今回は余りを2の-x乗で割って行く為、一番右に2の-x乗を求める列を追加している。
得た商を上から順番に左から並べると二進法の表示になる。

Excelの設定:小数部分

Excelの式は下記の通り。
同様に左上のセルがA1。

最初は求める十進法の数字から始まり、2の-x乗で割った商をQUOTIENT(数, E2)で、余りをmod(数, E2)で求める。ここで得た商をまた2の-x-1乗で割って商と余りを求める。
これを余りが0になるまで続けて、求めた順に左から並べると求める二進法での表示が得られる。

以上、
整数部分は1101
小数部分は0111001100
合わせると

1101.0111001100…

になる。

前回との齟齬

前回、「4.45の二進法表記は100.011101…と分かる。」と記載したが、今回は1101.0111001100…になっている。
これは10桁にした為丸められてこうなった様だ。

>>> from mpmath import *
>>> mp.prec = 10
>>> m = mpf('4.45')
>>> bin(m.man)
'0b100011101'
>>> mp.prec = 20
>>> m = mpf('4.45')
>>> bin(m.man)
'0b1000111001100110011'

上記で見て分かる通り、20桁にすると小数点部分(4の二進法表記100から下の部分)が011100110011…になっているのが分かる。

整数部分と小数部分の表示の意味の違い

整数部分と小数部分で計算方法が異なる事について、最初二進法独特なのかな、と言う気がしていたが、良く考えたら十進法でも同じと気づいた。

例えば、123.45について、20は100で割った時の余り、3は23を10で割った時の余り、4は0.45を0.1で割った商であり、余り0.05を0.01で割った時の商が5。

今まで無意識に計算していたけれど、整数部分と小数部分で意味が異なる事を学んだ。

アマゾンで今語学・教育関連本50%オフキャンペーンとの事で、その中で見かけて買ってしまった発音の本。
英語は発音が出来ればより楽しくなってくるので、読んでやってみます。

コメント

タイトルとURLをコピーしました