天国にいけるC言語入門 シーズン1 パソコン超初心者がゼロから東方風シューティングをつくる編 ver.0.4.15.789 RELIEF
☆☆☆10進数の実数を2進数で表現する おまけ より簡単に10進数の実数を2進数に変換する方法
☆☆☆10進数の実数を2進数で表現する おまけ より簡単に10進数の実数を2進数に変換する方法
より簡単???(笑)に
10進数の実数を2進数に変換する方法について述べておきましょう。
0.056754796337のような10進数の実数でも
簡単に2進数で表すことができるようになっちゃうぞ!
今までのエピソードで見てきたように
🍎🍎
一般に(2のn乗未満の
(2のn乗未満の整数値)の2のn乗を2で割った
2の(n-1)乗以下の
2の(n-1)乗 , 2の(n-2)乗 , 2の(n-3)乗・・4,2,1の
数値の足し合わせをもちいて表すことができます。🍎🍎
さらに発展させると
一般に
10進数の
(2のn乗)、(2のn-1乗)、(2のn-2乗)・・
2、1、 (2の-1乗)=2分の1、 (2の-2乗)=(2の2 乗)分の1
( 2の-3乗)=(2の3乗)分の1・・・
の数値の足し合わせを用いて表すことができます。
そして、そのように
10進数の実数値を
(2のn乗)、(2のn-1乗)、(2のn-2乗)・・
2、1、 (2の-1乗)=2分の1、 (2の-2乗)=(2の2 乗)分の1
( 2の-3乗)=(2の3乗)分の1・・・
の足し合わせで表してしまえば
🍊🍊🍊🍊🍊🍊🍊
(10進数)2のn乗=(2進数)1000000・・・0(0の数がn個)
(10進数)2の-n乗=(2進数)0.000000・・・0001(整数値部分と小数点以下の0を合わせた数がn個)
の関係性をもちいて
🍊🍊🍊🍊🍊🍊🍊
(2のn乗)、(2のn-1乗)、(2のn-2乗)・・
2、1、 (2の-1乗)=2分の1、 2の-2乗=(2の2 乗)分の1
2の-3乗=(2の3乗)分の1・・・
の足し合わせで表された10進数実数値を
2進数
1000000・・・000(0の数がn個)
100000・・・000(0の数がn-1個)
10000・・・000(0の数がn-2個)・・・
10
1
0.1
0.01
0.001
・
・
・
の足し合わせで表すことができるようになります
上記は今までのやり方ですね
では 実際に10進数の実数値3.125を2進数であらわしてみましょう。
まず 3.125の整数部分3は2進数11であらわすことができます。
そうなると残りの0.125をどうやって2進数であらわすか
ということになりますね。
一般に
10進数の
(2のn乗)、(2のn-1乗)、(2のn-2乗)・・
2、1、 (2の-1乗)=2分の1、 (2の-2乗)=(2の2 乗)分の1
( 2の-3乗)=(2の3乗)分の1・・・
の数値の足し合わせを用いて表すことができます。
たとえば10進数の実数値が0.125だったとしても
それは成立します
つまり
どのような実数値でも
(2のn乗)、(2のn-1乗)、(2のn-2乗)・・
2、1、 (2の-1乗)=2分の1、 (2の-2乗)=(2の2 乗)分の1
( 2の-3乗)=(2の3乗)分の1・・・
の数値の足し合わせを用いて表すことができます。
0.125は整数値部分が0なので
0.125は
小数点以下の数値である
(2の-1乗)=2分の1、 (2の-2乗)=(2の2 乗)分の1
( 2の-3乗)=(2の3乗)分の1・・・
の足しあわせを用いて表すことができます
0.125を
2分の1
(2の2 乗)分の1
(2の3乗)分の1
・・・
の足し合わせをもちいて表したなら
仮に次のような数式になっているはずです。
🍒0.125=
A×1/2+B×1/(2の2 乗)+C×1/(2の3乗)
+D×1/(2の4乗)・・・🍒
{A B C D・・・・・はいずれも10進数0か1の値をとります}
そして
A×1/2+B×1/(2の2 乗)+C×1/(2の3乗)
+D×1/(2の4乗)・・・
👆
この式を
🍊🍊🍊🍊🍊🍊🍊
(10進数)2のn乗=(2進数)1000000・・・000(0の数がn個)
(10進数)2の-n乗=(2進数)0.000000・・・0001(0の数がn個)
の関係性をもちいて
🍊🍊🍊🍊🍊🍊🍊
次のように2進数で表現することができます。
A×0.1+B×0.01+C×0.001+D×0.0001・・・
{A B C D・・・・・はいずれも(10進数)0か1の値をとります}
ここで
A B C D・・・・・はいずれも(10進数)0か1の値をとり、
2進数の係数となっています。
ですので
A×0.1は10進数×2進数となっているので
A×0.1を計算するときは
10進数もしくは2進数に統一して計算する必要があります
ここで
🍒の式の
両辺を2倍して
0.25=A+B×1/2+C×1/(2の2乗)+D×1/(2の3乗)・・・
としてみます
ここでAは10進数0か1の値をとりますが
左辺の0.25は整数値を含んでいないのでAは0
となるのがわかります。
よって
0.25=B×1/2+C×1/(2の2乗)+D×1/(2の3乗)・・・となります。
さらに
両辺を2倍して
0.5=B+C×1/2+D×1/(2の2乗)・・・
としてみます
ここでBは0か1の値をとりますが
左辺の0.5は整数値を含んでいないのでBは0
となります。
さらに
0.5=B+C×1/2+D×1/(2の2乗)・・・
に
B=0を代入して
0.5=C×1/2+D×1/(2の2乗)・・・
としたものを
両辺を2倍して
1=C+D×1/2・・・
としてみます
左辺の1は小数点以下の項を含んでいないので
D以下の
すべての項の係数は0となります
よって
C=1
となります
よって
A=0
B=0
C=1
D=0(D以降は全て0)
・
・
・
となります
10進数0.125=A×1/2+B×1/(2の2 乗)+C×1/(2の3乗)+D×1/(2の4乗)・・・
は
10進数0.125=A×0.1+B×0.01+C×0.001+D×0.0001・・・・・
(0.1,0.01,0.001,0.00001は2進数数値です)
に等しいので
🍒10進数0.125=
A×1/2+B×1/(2の2 乗)+C×1/(2の3乗)+D×1/(2の4乗)・・・
=
A×0.1(2進数)+B×0.01(2進数)+C×0.001(2進数)+D×0.0001(2進数)・・・🍒
=(10進数)0×0.1(2進数)+(10進数)0×0.01(2進数)+(10進数)1×0.001(2進数)+(10進数)0×0.0001(2進数)・・・🍒
=(2進数)0×0.1(2進数)+(2進数)0×0.01(2進数)+(2進数)1×0.001(2進数)+(2進数)0×0.0001(2進数)・・・🍒
〇 〇 〇
10進数の数値と2進数の数値は計算できないので
👆ここでは
(2進数)0=(10進数)0
(2進数)1=(10進数)1
の関係を用い
2進数同士の掛け算に変更しました
〇 〇 〇
=(2進数)0.0010・・・🍒
となります。
この計算において
2進数にで表したい10進数数値0.125を順々と2倍して行きましたが
👇
0.25
0.5
1
これらの数値
の一番左端の数値を上から順にひろっていくと
001となり
001は
今の🍒の答えの2進数0.0010・・・・・の小数点以下の部分001と対応しています。
よって
例えば
10進数実数0.09876543を2進数表示したければ
0.09876543をひたすら2倍し
0.19753086
0.39506172
0.79012344
1.58024688
(ここで整数値1をとりのぞいた0.58024688を2倍にすることになります。
なぜ そうなるかは先ほどの例を参照してください)
(なんで そうなるのかな?)
(先程の例を参照しても 全然意味がわからんぞ?)
(もうん 後にく・わ・し・い解説💖をのっけてあるのよ😊)
1.16049376👈0.58024688を2倍しました
(ここでも整数値1をとりのぞいた0.16049376を2倍にすることになります。)
0.32098752
0.64197504
1.28395018
・
・
・
最後に一番左端の0もしくは1の整数値の部分をよみとって
つなぎあわせていくと
00011001・・・
そしてこの
00011001・・・の先頭に
0.00011001と0.をいれたものが
0.09876543の2進数表示0.00011001・・・となります。
これで皆さんも10進数実数を自由に2進数に変換できるように
なりました。 おめでとうございます。
友達の前でいきなり
10進数実数を2進数に変換したら
完全に驚くことまちがいなしです。
おまけでしたよ~ん。
さらにおまけのコーナーです
では
今度は簡単な方法でなく
実際に
10進数実数0.09876543を数式をもちいて
2進数表示に変換してみましょう
まず 0.09876543の整数部分0は2進数0であらわすことができます。
そうなると残りの0.09876543をどうやって2進数であらわすか
ということになりますね。
一般に
10進数の
2のn乗、2のn-1乗、2のn-2乗・・
2、1、 2の-1乗=2分の1、 2の-2乗=(2の2 乗)分の1
2の-3乗=(2の3乗)分の1・・・
の数値の足し合わせを用いて表すことができます。
2のn乗
2のn-1乗
2のn-2乗
・
・
・
2
1
2の-1乗=2分の1
2の-2乗=(2の2 乗)分の1
2の-3乗=(2の3乗)分の1
・
・
・
は用いられないものがあっても構いません
0.09876543は整数値部分が0なので
0.09876543を
小数点以下の数値
2分の1
(2の2 乗)分の1
(2の3乗)分の1・・・
の足し合わせをもちいて表すことになります
2のn乗
2のn-1乗
2のn-2乗
・
・
・
2
1
は登場してきませんね
0.09876543を
小数点以下の数値
2分の1
(2の2 乗)分の1
(2の3乗)分の1・・・
の足し合わせをもちいて表した数式は以下のようになっているはずです。
🍒0.09876543=
A×1/2+B×1/(2の2 乗)+C×1/(2の3乗)
+D×1/(2の4乗)・・・🍒
{A B C D・・・・・はいずれも10進数(0もしくは1の値)をとります}
そして
A×1/2+B×1/(2の2 乗)+C×1/(2の3乗)
+D×1/(2の4乗)・・・
👆
この式を
🍊🍊🍊🍊🍊🍊🍊
(10進数)2のn乗=(2進数)1000000・・・000(0の数がn個)
(10進数)2の-n乗=(2進数)0.000000・・・0001(0の数がn個)
の関係性をもちいて
🍊🍊🍊🍊🍊🍊🍊
次のように2進数で表すことができます。
A×0.1+B×0.01+C×0.001+D×0.0001・・・
{A B C D・・・・・はいずれも10進数0か1の値をとります}
ここで
A B C D・・・・・はいずれも10進数0か1の値をとり、
2進数の係数となっています。
ここで
🍒の式の
両辺を2倍して
0.19753086=A+B×1/2+C×1/(2の2乗)+D×1/(2の3乗)・・・
としてみます
ここでAは10進数で0か1の値(2進数で0か1の値)をとりますが
左辺の0.19753086は整数値を含んでいないのでAは0
となるのがわかります。
よって
0.19753086=B×1/2+C×1/(2の2乗)+D×1/(2の3乗)・・・となります。
さらに
両辺を2倍して
0.39506172=B+C×1/2+D×1/(2の2乗)・・・
としてみます
ここでBは0か1の値をとりますが
左辺の0.39506172は整数値を含んでいないのでBは0
となります。
さらに
0.39506172=C×1/2+D×1/(2の2乗)・・・
両辺を2倍して
0.79012344=C+D×1/2・・・
としてみます
左辺の0.79012344は整数値を含んでいないのでCは0
となります
さらに
0.79012344=D×1/2・・・
両辺を2倍して
1.58024688=D+E×1/2+F×1/(2の2乗)・・・
としてみます
おや?
1.58024688の整数値部分は1ですね
ですので
Dは1の値をもつことになります
すると・・・
💖ここが注目ポイントです💖
1.58024688=D+E×1/2+F×1/(2の2乗)・・・
は
1.58024688=1+E×1/2+F×1/(2の2乗)・・・
となります
ですので
両辺から1を引くと
🍒0.58024688=E×1/2+F×1/(2の2乗)・・・🍒
となります
ですので
🍒0.58024688=E×1/2+F×1/(2の2乗)・・・🍒
の両辺を2倍すると
🍒1.16049376=E+F×1/2・・・🍒
となります
つまり
1.58024688=1+E×1/2+F×1/(2の2乗)・・・
の両辺を2倍するのではなく
両辺から1を引いた
🍒0.58024688=E×1/2+F×1/(2の2乗)・・・🍒
の両辺を2倍することになるというわけです
1.58024688=1+E×1/2+F×1/(2の2乗)・・・
の両辺を2倍すると
3.16049376=2+E+F×1/2+・・・
となり
Eの値が少し求めにくくなります
(🌞ちょっと解説🌞
簡単に10進数実数値を2進数で表す方法の場合でも
1.58024688を2倍するのではなく
1を引いた
🍒0.58024688を2倍しました
なぜなら
1.58024688を2倍すると
3.16049376
となるからです
ここがちょっとしたポイントです
簡単な方法を用いて
10進数実数0.09876543を2進数表示する場合
0.09876543をひたすら2倍し
0.19753086
0.39506172
0.79012344
1.58024688
(ここで整数値1をとりのぞいた0.58024688を2倍にすることになります。
なぜ そうなるかは今の例を参照してください)
(なんで そうなるのかな?)
(今の例を参照しても やはり全然意味がわからんぞ?)
(もうん ちょっと後にく・わ・し・い解説💖をのっけてあるの💖😊)
1.16049376
(ここで整数値1をとりのぞいた0.16049376を2倍にすることになります。)
0.32098752
0.64197504
1.28395018
・
・
・
最後に一番左端の0,1の整数値の部分をよみとって
つなぎあわせていくと
00011001・・・
そしてこの
00011001・・・の先頭に
0.00011001と0.をいれたものが
10進数0.09876543の2進数表示0.00011001・・・
めでたし💖 めでたし💖
となるのですが
ここで
1.58024688
を
2倍するとなると
0.19753086
0.39506172
0.79012344
1.58024688
(ここで整数値1をとりのぞいた0.58024688を2倍にすることになります。
なぜ そうなるかは先ほどの例を参照してください)
(なんで そうなるのかな?)
(先程の例を参照しても 全然意味がわからんぞ?)
(そこで実際に整数値1をとりのぞかず1.58024688の2倍を実行すると・・・)
3.16049376
(さらに実際に3.16049376の2倍を実行すると・・・)
6.32098752
(さらに実際に6.32098752の2倍を実行すると・・・)
12.64197504
(さらに実際に12.64197504の2倍を実行すると・・・)
25.28395008
・
・
・
となり
最後に一番左端の整数値の部分をよみとって
つなぎあわせていくと
00013612・・・
そしてこの
00013612・・・の先頭に
0.00013612・・・と0.をいれたものが
0.09876543の2進数表示0.00013612・・・とはなりませんね💖
そこで
1.58024688
(ここで整数値1をとりのぞいた0.58024688を2倍にすることになります。)
のように
2倍を続けていて
左端の整数値部分が1になった段階で
1を取り除くことになります
そして
0.58024688
を
2倍することになります
🌞10進数実数値を2進数実数値に簡単に変換する方法のポイントはここです🌞)
そして
1.58024688=1+E×1/2+F×1/(2の2乗)・・・
の両辺を2倍するのではなく
両辺から1を引いた
🍒0.58024688=E×1/2+F×1/(2の2乗)・・・🍒
の両辺を2倍した
1.16049376=E+F×1/2・・・
の
1.16049376の整数値部分は1ですね
ですので
Eは1の値をもつことになります
よって
A=0
B=0
C=0
D=1
E=1
・
・
・
より
10進数実数0.09876543=
A×1/2+B×1/(2の2 乗)+C×1/(2の3乗)+D×1/(2の4乗)・・・
=A×0.1(2進数)+B×0.01(2進数)+C×0.001(2進数)+D×0.0001(2進数)+E×0.000001(2進数)・・・
=(10進数)0×0.1(2進数)+(10進数)0×0.01(2進数)+(10進数)0×0.001(2進数)+(10進数)1×0.0001(2進数)+(10進数)1×0.00001(2進数)・・・
=(2進数)0×0.1(2進数)+(2進数)0×0.01(2進数)+(2進数)0×0.001(2進数)+(2進数)1×0.0001(2進数)+(2進数)1×0.00001(2進数)・・・
〇 〇 〇
👆ここでは
(2進数)0=(10進数)0
(2進数)1=(10進数)1
の関係を用いました
〇 〇 〇
=(2進数)0.00011・・・
となります
👆上記が数式を用いて
10進数実数0.09876543を(2進数)0.00011・・・に変換する方法でしたが
簡単な方法より
かなり手間がかかることがお分かりになられたでしょうか?
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます