2012-04-19 1 views
12

GCC 4.4.1에서 Code::Blocks을 사용하고 있으며 C 코드에서 64 비트 부호있는 정수를 인쇄 할 수없는 것 같습니다.GCC 4.4.1에서 64 비트 정수를 인쇄하는 방법은 무엇입니까?

이 코드 :

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

가 제공합니다 :

bcdefabcdefcdef 
,536,913,632

Sizeof: 64-bit 
cdefcdef 
1bcdefabcdefcdef 
-839922193 

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 */ 

는 출력을 생성합니다 10

나는 뭔가를 놓친가?

+1

가능한 중복 http://stackoverflow.com/questions/2844/how-do-you-printf-an-unsigned-long- long-int). – npclaudiu

+0

두 번째 printf가 어떻게 잘못됩니까? 아, 지금 예에서 보았습니다. 신경 쓰지 마. 이 예제는 리눅스에서 나에게 맞는 값을 출력한다. –

+0

@npclaudiu - 고마워요. 나는 거기에서 그것을 얻었다! – Fenikso

답변

6

%I64d이 도움이되는지 확인하십시오. %lldlong long int 괜찮지 만 가지, 이식 64 개 비트 정수를 인쇄 (C99에서 이상)에 윈도우 IDE를

9

에 때로는해야 #include <inttypes.h> 정말 다른 얻고 C99 매크로 PRIx64PRId64을 사용합니다. 그러면 코드가 작성됩니다.

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

편집 : 더 많은 예제는 this question을 참조하십시오.

+2

기술적으로 'int64_t'의 형식입니다. 'long long'과 다른 경우가 있습니다. 물론 기존의 깨진/꽤 - C99 - 아직 - 아직 시스템에 * 작업 * 일부 기회가 있습니다. :-) – torek

+0

또한 작동합니다. 감사! – Fenikso

0

마지막으로 그것을 가지고 :

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

인쇄 :

2003520930423229935 
1bcdefabcdefcdef 

감사 @npclaudiu을!

4

이것은 운영체제에 따라 다릅니다. 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); 
[이 질문] (의
+1

+1 Windows 용 mingw 문서를 지적합니다. – Fenikso