GNU의 C ++ 컴파일러에서이 코드를 시도하고 있는데 그 동작을 이해할 수 없습니다.
#include <stdio.h>;
int main()
{
int num1 = 1000000000;
long num2 = 1000000000;
long long num3;
//num3 = 100000000000;
long long num4 = ~0;
printf("%u %u %u", sizeof(num1), sizeof(num2), sizeof(num3));
printf("%d %ld %lld %llu", num1, num2, num3, num4);
return 0;
}
주석 처리 된 줄의 주석 처리를 제거하면 코드가 컴파일되지 않고 오류가 발생합니다.
오류 : 정수 상수가 long 유형에 비해 너무 큽니다.
그러나 코드가있는 그대로 컴파일되고 실행되면 10000000000보다 훨씬 큰 값이 생성됩니다.
왜?
<stdint.h>
하고 사용하는 것이 좋습니다uint64_t
. 64 비트 값을 표시하려면printf( "%" PRIu64 "\n", val);