-2147483648

我們寫程序中可能會經常碰到overflow的情形,其中對-2147483648的處理一不小心就會出現數據overflow。
-2147483648 = -2^31,我們知道這是64位系統中int型能表示的最小值,這個時候我們要小心對其進行操作,比如執行如下程序:

int a = -2147483648;
int b = a*-1;
int c = a-1;

可以發現結果爲:
這裏寫圖片描述
這是爲什麼呢?
先說c:
我們知道計算機加減運算時是採用補碼的方式,所以-2147483648-1可以寫成:
80000000+FFFFFFFF=7FFFFFFFF=2147483647;
再說b:
按道理b=-a=2147483648,但是很顯然,它超出了int的表示範圍,它的機器碼爲80000000,用補碼理解即爲-2147483648。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章