2016-06-10 65 views
2

我正在試圖找到int的平方。我的代碼看起來像下面:C++中的「Int」乘法與「long long」結果

long long sqr=0; 
int num=77778; 
sqr= num*num; 

結果應該是6049417284 但是,當我檢查輸出它顯示1754449988。 我在做什麼錯誤? long long應該能夠存儲結果,但爲什麼我會得到不同的值?

+0

首先'num * num'給出一個整數(並溢出),然後隱式地轉換爲long long。 –

回答

1

在這種情況下,中間結果類型與第一個參數類型相同。所以這段代碼在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 
+0

我想了解我的代碼中的錯誤。不應該使用我的代碼正確存儲結果嗎? – roang

+1

@rowang存儲之前的中間結果與參數類型相同。 –

0

,其結果將是一個整數值。然後,將整數值賦給long long是毫無意義的。

因此,要獲得期望的結果,num也應該很長。