web-dev-qa-db-ja.com

GCC 4.4.1で64ビット整数を出力する方法

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

何か不足していますか?

13
Fenikso

%I64dが役立ちます。 %lldlong long intしかし、Windows IDEでは状況が実際に異なる場合があります

11
Pavan Manjunath

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

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

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

9

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

ただし、mingwコンパイラを使用している場合、これはMicrosoftライブラリを使用するため、それらの documentation を調べる必要があります。

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

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);
5
dbrank0

longint = 0x1BCDEFABCDEFCDEF;/* 2003520930423229935 * /次のように印刷できます-

printf( "%llx"、longint);

0
Amit Rai

最後にそれを得た:

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

プリント:

2003520930423229935
1bcdefabcdefcdef

@npclaudiuに感謝!

0
Fenikso