2

この 32 ビットの 2 進数 (0011111101000000000000000000000) があり、それを浮動小数点数に変換する方法を知りたいです。

プログラミングやコンバーターを使用せずに、この 32 ビットの 2 進数を手動で浮動小数点数に変換するにはどうすればよいですか?

ありがとう、

ダン

4

2 に答える 2

10

ここで単一の浮動小数点を探していると仮定すると、次の形式になります。

最初の桁は符号、次の 8 桁は指数、最後の 23 桁は仮数です。

あなたの番号 (0011111101000000000000000000000)

符号: 0 は +指数: 01111110 は
-1 (126-127)
0.25、次に 0.125 など)

次に、次のように値を計算します:

sign * 2^exp * Significand

1 * 2^-1 * 1.5
1 * 0.5 * 1.5
0.75

浮動小数点数は 0.75 です。

于 2013-01-24T15:17:24.543 に答える
2

ウィキペディアや他の場所を見回すと、浮動小数点標準 (さまざまな標準があります。デスクトップなどで使用されているため、IEEE754 が最も一般的に知られています (dsp には独自のものがある場合があります)計算が高速です)) は、数値を「正規化」します。浮動小数点は小数点がどこにあるかがすべてです。非浮動小数点整数には、数値の右側に暗黙の小数点があります

00111111010000000000000000000000. <--- here

正規化するすべてのゼロ以外では、数値をバイナリで 1.xxxx にするフォーマットを使用していると仮定して、小数点を移動する必要があります。

001.11111010000000000000000000000

小数点以下の桁数は最上位桁の直後に移動されました (そのため、小数点の左側には 1 だけが表示されます)。

高校の数学で覚えていれば、123 は 1.23 * 10^2 (10 の 2 乗) と書くことができます。123 は 123 * 10^0 でもあります。10 を底とする数値では、小数点を左に移動する 1 桁ごとに、10 のべき乗が 1 増加します。右の場所ごとに減少します。基数が 2 の 2 進法でも違いはありません。小数点を左に移動するたびに 2 の累乗が増加します (バイナリは基数 2)。右に移動するたびに 2 の累乗が減少します。

正確に言うと、私たちの番号は今です

1.1111101 * 2^30

ここで、浮動小数点形式の詳細について説明します。小数点の左側の 1 (正確な数の 0 とその他のいくつかの例外を除く) はそこにあると想定されるため、その浮動小数点数の最終的な 2 進数表現に含まれないことがあります。代わりに、仮数用にもう 1 ビットを使用できる場合は、常に 1 であることがわかっているビットを置きます。多くの場合、仮数はバイナリで wysiwyg です。指数は、特に IEEE754 では頭を悩ませるものです。たとえば、数値のバイナリ形式の 128 の指数は、2 の 0 乗を表し、129 は 2 の 1 乗などを表します。これは奇妙に思えるかもしれませんが、これらの形式の一部では 2 の補数フィールドにすぎません。シングル、ダブル、

もう一つの例

0000000000000000000000000000000000000101

だろう

1.01 * 2^2

32 ビット整数 (浮動小数点ではない) で開始し、32 ビット浮動小数点数で終了したい場合、浮動小数点数には符号ビットと指数が必要なだけでなく、その数値のすべての詳細を保持できないことは明らかです。仮数、仮数は32ビット未満なので、最下位ビットを捨てます

1000000000000000000000000000001  

ある時点で切り落とされます:

1.000000000000000 * 2^something
于 2013-01-24T15:18:49.233 に答える