6

私はこの番号を16進数で持っています:

FFFFFFFFFFFF

保存する必要があるので、 double を使用しました

double a=0xffffffffffff;

しかし、私はそれを印刷する必要があり、方法がわかりません。%f, %d,を使用するたびに%x、その値が出力されません。印刷するだけですffffffffffff。私のコード:

int main()
{
    double a=0xffffffffffff;
    printf("%x\n",a);
    printf("%d\n",a);
    printf("%X\n",a);
    printf("%f\n",a);
    return 0;
}

唯一の真の値は%f; です。これは、16 進数の 10 進数値を返します — 次のように返します。

 ffffffe0
 -32 
 FFFFFFE0
 281474976710655.000000

これで、文字列にもFFFFFFFFFFFFがあり、両方を比較する必要があるため、比較するためにその16進数から文字列に変更する必要があります。それができなければprintf、どちらもうまくいきませんsprintf

4

4 に答える 4

9

それは整数であり、長いものです。そのような値を格納するために使用しないでください。これdoubleは浮動小数点用です。

使用するだけです:

unsigned long long temp = 0xffffffffffffull;

12 桁の 16 進数があるため、数値には少なくとも 12 * 4 = 48 ビットが必要です。ほとんどのプラットフォームunsigned long longには 64 ビットが必要ですが、これで問題ありません。

コンパイラが C99 をサポートするのに十分サポートされている場合は、次のことができます。

#include <stdint.h>

次にuint_least64_t、コメントで提案されているタイプを使用します。Linux では GCC を使用していると思いますので、問題ないはずです。コードを C99 としてコンパイルすることを指定する必要がある場合があります ( を使用-std=c99)。

印刷するには、次を使用します。

printf("temp=%llx\n", temp);

また、値自体は 16 進数ではありませんが、16 進数として出力できることに注意してください。値は単なる値です。基数は、テキストとの間で変換する場合、つまり数値の外部表現である場合にのみ重要です。バイナリ コンピューターの内部では、数値は 2 進数で格納されます。

于 2013-05-08T13:09:00.293 に答える
0

値を a に保存している間、double16 進数の出力を取得する適切な方法はありません。

あなたのコードはにを渡し、それをプレーンとしてフォーマットしよdoubleprintf()と繰り返し試みますint。それはうまくいきません。警告を有効にして GCC を使用した場合は、フォーマット文字列と値の不一致に関する警告が表示されるはずです (警告を有効にせずに GCC を使用する場合は、悪/怠惰な方法を悔い改め、コンパイラの警告をオンにします —-Wall少なくとも、おそらく-Wextraも使用してください) 、結果の警告を修正します)。

値は 12 個の F であるため、long long値 (またはunsigned long long) です。それを保存し、次のように扱います。

int main()
{
    unsigned long long a = 0xFFFFFFFFFFFF;
    printf("%llx\n", a);
    printf("%lld\n", a);
    printf("%llX\n", a);
    printf("0x%llX\n", a);
    return 0;
}
于 2013-05-08T13:14:18.917 に答える