2012-02-29 45 views
5

在我的情況下,兩個INT_MAX編號的乘積是296447233,這是不正確的。C/C++中兩個INT_MAX麻煩的產品不正確

long long int product = 0; 
product = 2137483647 * 2137483647; 
printf("product: %lli\n", product); 

我做錯了什麼,以及如何糾正? 謝謝!

+2

庵的數字。 ..INT_MAX是2147483647(對於32-bi t ints)。你害羞了1000萬。 – 2012-02-29 18:33:19

+0

哦,不!!!!!!你好,我得到了INT_MAX錯誤。感謝您指出! – newprint 2012-02-29 18:50:19

回答

14

您的2137483647都是int類型。所以他們保持這種類型和溢出。

讓他們long long S:

product = 2137483647LL * 2137483647LL; 

或投:

product = (long long)2137483647 * 2137483647; 
+0

因此,基本上,兩個int的乘積只是溢出了,即使我將它分配給long long int?感謝你的回答 ! – newprint 2012-02-29 18:23:37

+4

正確。在你的例子中,轉換髮生在*乘法之後。所以它在被提升到「長久」之前溢出。 – Mysticial 2012-02-29 18:24:31

+1

編譯器會將這兩個數字視爲整數,進行數學運算,然後考慮將該值放入'product'中。 – 2012-02-29 18:24:48

6

嘗試

product = 2137483647LL * 2137483647LL; 

,以確保編譯對待,只要長

+0

哦,我+ 1'指出'LL'。 – Mysticial 2012-02-29 18:25:53