13

GCC 4.4.1 でCode::Blocksを使用していますが、C コードから 64 ビット符号付き整数を出力できないようです。

このコード:

long long longint;

longint = 0x1BCDEFABCDEFCDEF; /* 2003520930423229935 */
printf("Sizeof: %d-bit\n", sizeof(longint) * 8);     /* Correct */
printf("%llx\n", longint);                           /* Incorrect */
printf("%x%x\n", *(((int*)(&longint))+1), longint);  /* Correct */
printf("%lld\n", longint);                           /* Incorrect */ 

出力を生成します:

Sizeof: 64-bit
cdefcdef
1bcdefabcdefcdef
-839922193

64 ビット演算は正しく動作しているようです。

longint -= 0x1000000000000000;
printf("%x%x\n", *(((int*)(&longint))+1), longint);

与えます:

bcdefabcdefcdef

何か不足していますか?

4

5 に答える 5

11

%I64d役立つかどうかを確認してください。%lldは問題long long intありませんが、Windows IDE では状況が大きく異なる場合があります

于 2012-04-19T06:54:36.353 に答える
11

(C99 以降で) 移植可能な 64 ビット整数を出力#include <inttypes.h>するには、C99 マクロPRIx64PRId64. それはあなたのコードを作るでしょう;

printf("Sizeof: %d-bit\n", sizeof(longint) * 8);
printf("%" PRIx64 "\n", longint);
printf("%" PRId64 "\n", longint);

編集:その他の例については、この質問を参照してください。

于 2012-04-19T06:56:51.163 に答える
6

これは OS に依存します。GLIBC を使用するほぼすべての GCC でこれを実行している場合は、%llx が機能します。

ただし、mingw コンパイラを使用している場合、これは Microsoft ライブラリを使用するため、ドキュメントを調べる必要があります。

これにより、プログラムが次のように変更されます。

longint = 0x1BCDEFABCDEFCDEFLL; /* 2003520930423229935 */
printf("Sizeof: %d-bit\n", sizeof(longint) * 8);     /* Correct */
printf("%I64x\n", longint);                           /* Incorrect */
printf("%x%x\n", *(((int*)(&longint))+1), longint);  /* Correct */
printf("%I64d\n", longint);
于 2012-04-19T06:59:22.730 に答える
0

最後にそれを手に入れました:

longint = 0x1BCDEFABCDEFCDEF; /* 2003520930423229935 */
printf("%I64d\n", longint);
printf("%I64x\n", longint);

版画:

2003520930423229935
1bcdefabcdefcdef

ありがとう@npclaudiu!

于 2012-04-19T06:57:24.937 に答える