Tôi đang thử mã này trên trình biên dịch C ++ của GNU và không thể hiểu hành vi của nó:
#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;
}
Khi tôi bỏ ghi chú dòng nhận xét, mã không biên dịch và đang xuất hiện lỗi:
lỗi: hằng số nguyên quá lớn đối với kiểu dài
Tuy nhiên, nếu mã được biên dịch như nó vốn có và được thực thi, nó sẽ tạo ra các giá trị lớn hơn nhiều 10000000000.
Tại sao?
<stdint.h>
và sử dụnguint64_t
. Để hiển thị giá trị 64 bit,printf( "%" PRIu64 "\n", val);