2013-11-04 22 views
0
int sum; 

由int N表示的最大數字是2^0 + 2^1 + ... + 2 ^(sizeof(int)* 8-1)。如果我設置sum = N + N會發生什麼?我對編程有點新鮮,只是讓你們變得新鮮。如果我將int設置爲等於2個最大整數的和,會發生什麼?

+2

[Integer ove rflow](http://en.wikipedia.org/wiki/Integer_overflow)。 – meagar

+1

如果您嘗試並親自體驗會發生什麼? – nhgrif

+0

[替代文章](http://www.cplusplus.com/articles/DE18T05o/),特定於C++。 – ajp15243

回答

0

你將有一個整數溢出的數量將太大int如果要做到這一點,你必須把它宣佈爲long

希望這有助於

4

如果的結果int添加超出了可以在intINT_MIN .. INT_MAX)中表示的值的範圍,您有一個溢出

對於帶符號整數類型,整數溢出的行爲是未定義的。

在許多實現中,你會通常得到的結果是與忽略所有,但低位一致的數學結果(其中N是位在int數)的N位 - 但語言並不能保證。

此外,允許編譯器假設您的代碼的行爲已定義,並基於該假設執行優化。

例如,鐺++ 3.0,此程序:

#include <climits> 
#include <iostream> 

int max() { return INT_MAX; } 

int main() 
{ 
    int x = max(); 
    int y = x + 1; 
    if (x < y) { 
     std::cout << x << " < " << y << "\n"; 
    } 
} 

打印無關時-O0編譯,但是打印

2147483647 < -2147483648 

當與-O1或更高編譯。

摘要:不要這樣做。

(順便說一下,int類型的最大可表示值被更簡單地表示爲2 N-1 -1,其中N是在int類型的比特寬度 - 或者甚至更簡單地稱爲INT_MAX對於典型的系統具有32位int,這是2 -1,或2147483647你還假定sizeof是在8位的單元;實際上它是在CHAR_BIT位,其中CHAR_BIT至少 8個單位,但可以(很少)更大)。

+0

規範中的無符號類型的行爲是什麼?包裝的價值? – deepmax

+0

@MM。 modulo'2^'...... – 2013-11-04 18:36:39

+0

@ H2CO3:你是指'max()+ 10',它是_Modulo-2_ max()+ 1的結果,然後將剩下的'9'加到這個結果中? – deepmax

相關問題