C++中定義long long 類型變量該注意的問題

//首先先知道 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);	正常輸出

總結

小於INT最大值的常數,自動保存爲INT類型

INT * INT 得到的結果也是INT,即使賦值給 long long 也有溢出的情況發生

如果數據太大 建議用 long long = long long * long long 保證不溢出

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章