浮動小数点値(doubleなど)は、整数値とは完全に異なって表されます。整数値から、基数2の同じ数値を表すゼロが埋め込まれた(正の数値の場合)2進数として表されることに慣れています。これは浮動小数点値には当てはまりません。
定義上、浮動小数点値には浮動小数点があります。したがって、2進数は、小数点がどこにあるかに関する情報をエンコードする必要があります。これは、番号を次のように再形成することによって行われます。
(+/-) x * 2^y whereas 0 <= x < 2 (= 10 base 2)
(+/-)
1ビットかかる記号です。x
仮数、y
指数です。したがって、バイナリ表現は最終的に3つの部分をエンコードする必要があります。
0 <= x < 2
、xは常に1.somethingで始まるため、表現に含める1.
必要はありません。小数点以下の部分のみが保存され、仮数と見なされます。
あなたの例では、2.0は次のように再形成されています。
+ 1.0 * 2 ^ 1
符号:+仮数:0指数:1
これはたまたま次のように表されます
0 10000000000 0000000000000000000000000000000000000000000000000000
負の数の場合、符号は-です。これは先頭として表され1
ます。
1 10000000000 0000000000000000000000000000000000000000000000000000
元の投稿には、先行ゼロが欠落している数値がリストされていることに注意してください。これは、数学的には正しいですが、バイナリ表現をキャプチャしようとすると誤解を招く可能性があります。
10000000000 0000000000000000000000000000000000000000000000000000 =
0 10000000000 0000000000000000000000000000000000000000000000000000
理解して覚えておくべき詳細がいくつかあります。たとえば、指数も負の値にすることができます。より詳細な説明は、FloatingPointWikipediaの記事にあります。Joachimによって参照されるbinaryconvert.comも、表現を理解するのに役立ちます。