int sum;
由int N表示的最大數字是2^0 + 2^1 + ... + 2 ^(sizeof(int)* 8-1)。如果我設置sum = N + N會發生什麼?我對編程有點新鮮,只是讓你們變得新鮮。如果我將int設置爲等於2個最大整數的和,會發生什麼?
int sum;
由int N表示的最大數字是2^0 + 2^1 + ... + 2 ^(sizeof(int)* 8-1)。如果我設置sum = N + N會發生什麼?我對編程有點新鮮,只是讓你們變得新鮮。如果我將int設置爲等於2個最大整數的和,會發生什麼?
你將有一個整數溢出的數量將太大int
如果要做到這一點,你必須把它宣佈爲long
希望這有助於
如果的結果int
添加超出了可以在int
(INT_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個單位,但可以(很少)更大)。
[Integer ove rflow](http://en.wikipedia.org/wiki/Integer_overflow)。 – meagar
如果您嘗試並親自體驗會發生什麼? – nhgrif
[替代文章](http://www.cplusplus.com/articles/DE18T05o/),特定於C++。 – ajp15243