ฉันกำลังลองใช้รหัสนี้ในคอมไพเลอร์ C ++ ของ GNU และไม่เข้าใจพฤติกรรมของมัน:
#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;
}
เมื่อฉันยกเลิกการแสดงความคิดเห็นในบรรทัดที่แสดงความคิดเห็นรหัสจะไม่รวบรวมและให้ข้อผิดพลาด:
ข้อผิดพลาด: ค่าคงที่จำนวนเต็มใหญ่เกินไปสำหรับประเภทยาว
แต่ถ้ารหัสถูกคอมไพล์ตามที่เป็นอยู่และถูกเรียกใช้งานโค้ดจะสร้างค่าที่มากกว่า 10000000000
ทำไม?
<stdint.h>
uint64_t
เพื่อแสดงค่า 64 บิตprintf( "%" PRIu64 "\n", val);