#include <stdio.h>
int main() {
unsigned long long int num = 285212672; //FYI: fits in 29 bits
int normalInt = 5;
printf("My number is %d bytes wide and its value is %ul. A normal number is %d.\n", sizeof(num), num, normalInt);
return 0;
}
산출:
My number is 8 bytes wide and its value is 285212672l. A normal number is 0.
이 예기치 않은 결과는를 인쇄 한 것으로 가정합니다 unsigned long long int
. 당신이 어떻게 할 printf()
에게 unsigned long long int
?
답변
u (부호없는) 변환과 함께 ll (el-el) long long 수정자를 사용하십시오. (Windows, GNU에서 작동).
printf("%llu", 285212672);
답변
당신은 당신과 같은 유형을 제공하는 inttypes.h 라이브러리를 사용하여 시도 할 수 있습니다
int32_t
, int64_t
, uint64_t
등 당신은 다음과 같은 자사의 매크로를 사용할 수 있습니다 :
uint64_t x;
uint32_t y;
printf("x: %"PRId64", y: %"PRId32"\n", x, y);
이것은 당신에게 같은 문제가주지하는 “보장”되어 long
, unsigned long long
각 데이터 유형에 얼마나 많은 비트 생각하지 않기 때문에, 등.
답변
%d
-> int
%u
-> unsigned int
%ld
-> long int
또는long
%lu
->에 대한 unsigned long int
또는 long unsigned int
또는unsigned long
%lld
-> long long int
또는long long
%llu
-> unsigned long long int
또는unsigned long long
답변
MSVS를 사용하는 long long (또는 __int64)의 경우 % I64d를 사용해야합니다.
__int64 a;
time_t b;
...
fprintf(outFile,"%I64d,%I64d\n",a,b); //I is capital i
답변
Windows에서 % llu가 제대로 작동하지 않고 % d가 64 비트 정수를 처리 할 수 없기 때문입니다. 대신 PRIu64를 사용하는 것이 좋으며 Linux에서도 이식 가능하다는 것을 알 수 있습니다.
대신 이것을 시도하십시오 :
#include <stdio.h>
#include <inttypes.h>
int main() {
unsigned long long int num = 285212672; //FYI: fits in 29 bits
int normalInt = 5;
/* NOTE: PRIu64 is a preprocessor macro and thus should go outside the quoted string. */
printf("My number is %d bytes wide and its value is %" PRIu64 ". A normal number is %d.\n", sizeof(num), num, normalInt);
return 0;
}
산출
My number is 8 bytes wide and its value is 285212672. A normal number is 5.
답변
리눅스에서는 %llu
Windows에서는%I64u
Windows 2000에서는 작동하지 않지만 버그가있는 것 같습니다!
답변
VS2005를 사용하여 x64로 컴파일하십시오.
% llu는 잘 작동합니다.