たとえば、0 100 1110
sign exponent mantisa
これは に等しい3.75
です。16 進数または 8 進数に変換するにはどうすればよいですか? 私は数時間本当に一生懸命探しました。助けてください。
100
ここで私を助けてくれ4
1110
ません7/8
か?(7/8) * 2^4
3.75
たとえば、0 100 1110
sign exponent mantisa
これは に等しい3.75
です。16 進数または 8 進数に変換するにはどうすればよいですか? 私は数時間本当に一生懸命探しました。助けてください。
100
ここで私を助けてくれ4
1110
ません7/8
か?(7/8) * 2^4
3.75
サインは明らかであるべきです。
仮数は、1 + 1/2*最初のビット + 1/4*2 番目のビット + 1/8*3 番目のビットを意味します... 「小数点以下」であることを除いて、基本的にはバイナリカウントです。
Exponent は、仮数に 2^exponent を掛けることを意味します。exponent
しかし、それが表す値のビットをどのように取得するのでしょうか? 私はいくつかのグーグルを行いました、そしてどうやらトップビットが設定されていて、残りが0
(10、100、1000 ...など)の1
場合、あなたは を持って101
います。の上。したがって、この場合、指数があります。2
011
0
010
-1
1
したがって、この場合、1.875 (仮数) *2^1 (2^指数) を計算して正 (符号) にします。
詳細: http://en.wikipedia.org/wiki/Double-precision_floating-point_format (これは倍精度サイズ用ですが、すべての原則は任意のサイズの浮動小数点に「適用」する必要があります)
編集:指数についてのより良い説明があります。
まず、IEEE 浮動小数点では、指数の最小値と最大値に特別な意味があります。すべてのゼロは「これはゼロまたは非正規数であること」を意味し、すべての 1 は「これは無限大または NaN であること」を意味します。したがって、通常の指数を表すためだけに 3 ビットの指数 ( 000
to ) がありますが、これは 6 つの値しかありません。111
001
110
ここで、「指数」バイアスと呼ばれるものを使用して、この 1 ~ 6 の範囲を負の値と正の値に変換します。特に、-2 ~ 3 の範囲が必要です (最大の正の指数 > 最大の値の大きさ)。負の指数なので、 1/ を実行してもオーバーフローを起こすことはできませんsmallest normalized number
. ただし、 1/denormalized number
を生成することはできInfinity
ます.)
指数の値を取得することでこれを取得します。特殊なケースでない場合は、バイナリ値から 3 を減算し、これを指数値として取得します。
0 100 1110
したがって
0
-> 正符号
100
-> バイナリ値 4、減算 3、指数 1
1110
-> 1 + 7/8
(1+7/8)*2^1 = 3.75
整数であるかのように、ビットを変換するだけです。浮動小数点数を扱っているという事実を無視してください。
01001110
isとis4E
であるため、16 進数に変換されます。(4 つにグループ化する方法に注意してください。)0100
4
1110
E
8 進数も同様で、 is 、 is 、isで116
あるため、 になります。(最初のグループを除いて、どのように 3 にグループ化するかに注目してください。)01
1
001
1
110
6