程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> c-判斷32位數相加溢出問題?

c-判斷32位數相加溢出問題?

編輯:編程綜合問答
判斷32位數相加溢出問題?

編寫了一個程序,兩個有符號的32位數相加
如果正溢出,則輸出 2147483647;
如果負溢出,則輸出(-2147483647-1);
如果不溢出,則輸出 運算結果。
然後試了幾個數,並不能理解輸出的結果,請一一指出每條運算結果的解釋,謝謝。

圖片說明

最佳回答:


首先要看你的程序裡面整數類型是int還是unsigned int,他們兩個的范圍不同, int 的取值范圍是 -2147483648 ~ +2147483647, 而unsigned int 的
取值范圍是0 ~ 42億(具體值我也就不算了) 若果你用的是int(按你圖片上的輸入來解釋), ①你輸入命令1, 並且輸入兩個有符號數 - 2147483648, -128;
他們兩個的和相當於2147483747-128 = 2147483619(想象成表盤就清楚了); 而-2147483776這個值並不在(int 的取值范圍是 -2147483648 ~ +2147483647)這個范圍內
,所以負向溢出。(注意:他所謂的正負向溢出指的是 若此數超過范圍的左(負)邊界則為負向溢出,相反 若此數超過范圍的右(正)邊界則為正向溢出) 同理,
②你輸入命令1, 並且輸入兩個有符號數 - 2147483648, -2147483648;他們兩個的和是0,而0又在取值范圍內,所以不溢出,輸出是0沒問題。③
你輸入命令1, 並且輸入兩個有符號數 - 2147483649(相當於2147483647), -128;他們兩個的和是2147483519, 在范圍內,輸出2147483519
④你輸入命令1, 並且輸入兩個有符號數 - 2147483650(相當於2147483646), 1;他們兩個的和是2147483647,在范圍內,輸出2147483647。

其實要理解給你看看圖片就可以了:
圖片說明

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved