我正在試圖找到int
的平方。我的代碼看起來像下面:C++中的「Int」乘法與「long long」結果
long long sqr=0;
int num=77778;
sqr= num*num;
結果應該是6049417284
但是,當我檢查輸出它顯示1754449988
。 我在做什麼錯誤? long long
應該能夠存儲結果,但爲什麼我會得到不同的值?
我正在試圖找到int
的平方。我的代碼看起來像下面:C++中的「Int」乘法與「long long」結果
long long sqr=0;
int num=77778;
sqr= num*num;
結果應該是6049417284
但是,當我檢查輸出它顯示1754449988
。 我在做什麼錯誤? long long
應該能夠存儲結果,但爲什麼我會得到不同的值?
在這種情況下,中間結果類型與第一個參數類型相同。所以這段代碼在sqr
中輸入了錯誤的值(因爲這裏有整數溢出)。試試這個:擁有鑄造
long long num = 77778;
long long sqr = num * num;
另一種方式:
int num = 77778;
long long sqr = (long long) num * num;
爲了更好地理解它,你可以檢查這些臺詞:如果你乘兩個整數
int ia = 1, ib = 2
double da = 1.0, db = 2.0 ;
double ic = ia/ib; // c == 0.0, because intermediate result of division is 0
double dc = da/db; // c == 0.5, expected result
我想了解我的代碼中的錯誤。不應該使用我的代碼正確存儲結果嗎? – roang
@rowang存儲之前的中間結果與參數類型相同。 –
,其結果將是一個整數值。然後,將整數值賦給long long是毫無意義的。
因此,要獲得期望的結果,num也應該很長。
首先'num * num'給出一個整數(並溢出),然後隱式地轉換爲long long。 –