//首先先知道 int 和 long long 最大值各爲多少
printf("%d\n", INT_MAX); //輸出2147483647
printf("%lld\n", INT64_MAX);//輸出9223372036854775807
//開始定義
long long x = 2468 * 100000000; //原以爲 = 246800000000 < long long最大值
printf("%lld\n", x); 結果輸出-1894967296 明顯溢出
問題出在哪裏??
//打印 X 的內存空間
printf("%d\n", sizeof(x)); //輸出 8 也沒錯
問題在於:
printf("%d\n", sizeof(2468)); //輸出 4 int類型
printf("%d\n", sizeof(100000000)); //輸出4 int類型
則 2468 * 100000000 也保存在 int中 導致溢出 溢出的結果賦值給x 也溢出
解決
long long a = 2468, b = 100000000;
long long x = a * b;
printf("%lld\n", x); 正常輸出