2

IEEE float hex 42F6E979 がある場合、どうすればそれを 10 進数に変換できますか? 小数表現は = 123.456001 だと思います

4

4 に答える 4

4

(ほとんどの)アセンブリ言語は実際には型をそれほど強く強制しないので、その値で場所を初期化してから、それをfloatとして扱う/使用することができます。変換する最も簡単な方法は、通常、次のようなものです。

.data

myfloat dd 042F6E979H
mydec   db 10 dup(?)

.code

mov ebx, offset mydec    
fld myfloat
fbstp [ebx]

これは実際には2進化10進数を生成するため、表示するには各バイトを2桁に分割する必要があります。もちろん、これはx86用です。他のほとんどのアーキテクチャでは、作業が少し難しくなります。たとえば、PowerPCにはfctiw、整数に変換するだけのがあります(x86と同じ一般的な順序でfist)。これを使用するには、通常、10の倍数を掛けて必要な小数点以下の桁数を取得し、整数に変換して、結果の正しい位置に小数点を置きます。1)浮動小数点数の範囲の限界に近づいている場合、または2)単一の整数で表現できるよりも高い精度が必要な場合は、少し醜くなる可能性があります。

于 2010-10-08T15:57:00.830 に答える
3

独自のコードをテストしている間に、このオンライン ツールを使用して回答を確認できます。参考までに、小数が 123.45 であるという点で正しいです...

ウィキペディアにも役立つ記事があります。

于 2010-10-08T15:48:59.910 に答える
1

ウィキペディアを参照するか、環境に既に存在する可能性があるライブラリ ルーチンを呼び出します。それはしばしば再発明される車輪です

于 2010-10-08T15:48:27.917 に答える
0

あなたが言語を提供していないので、私はこれを C で行います。

char hex[];
int *ptr;
for(int i = 0; i < 8; ++i)
{
   &ptr += toNumber(hex[i]) << (i * 4);
}

float *value = (float*)ptr;

toNumber 関数の記述は OP に任せます。

于 2010-10-10T13:45:36.103 に答える