編寫了一個程序,兩個有符號的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。
其實要理解給你看看圖片就可以了: