某位元組長為8位的計算機中,已知整型變數x,y的機器數分別為
[x]補 = 11110000
[y]補 = 10111000
z = 4*x+y/2
則z的機器數為?
答案給溢位,我算沒有溢位,請問該怎么算?
uj5u.com熱心網友回復:
4*x=1100 0000 //符號位是1,說明是負數,保留符號位,左移2位(低位補0)y/2=1101 1100 //符號位是1,保留符號位,右移1位(高位補1)
相加結果,11001 1100,說明溢位了,其實只需要看兩個運算元的符號位緊接著的1位是不是都是1,就能判斷是否會溢位了
uj5u.com熱心網友回復:
要看它的整型長度多少,如果只有1位元組的話,肯定溢位了uj5u.com熱心網友回復:
大佬,y/2我算的不一樣
不應該是由(y補)先算y = 11001000
y/2 = 10100100嗎
uj5u.com熱心網友回復:
x表示-16y表示-72
z=4*x+y/2
=4*(-16)+(-72)/2
=-100
4*x=1100 0000 //符號位是1,說明是負數,保留符號位,左移2位(低位補0)表示-64
y/2=1101 1100 //符號位是1,保留符號位,右移1位(高位補1)表示-36
相加結果,1 1001 1100雖然有溢位,但取其低8位,1001 1100 表示-100,結果正確。
uj5u.com熱心網友回復:
老師,我暈了
8位整形范圍不是-128到127嗎
-100咋溢位了呢
uj5u.com熱心網友回復:
題目有點問題,沒有明確是有符號還是無符號的uj5u.com熱心網友回復:
溢位是針對有符號數的,無符號數是進位/借位uj5u.com熱心網友回復:
溢位應該是不以表示范圍來判斷的,正因為它溢位,所以才保證了它的值還在范圍里
比如
0x7FFFFFFF(4位int的最大值) + 1 = 0x80000000 (變為負數)
這個負數也在 0x80000000到0x7FFFFFFF的范圍里,那它算不算溢位?
uj5u.com熱心網友回復:
四樓的四老師已經生動證明了,溢位和出錯是兩回事。溢位并不必然伴隨著出錯。回想你八歲的時候,溢位了一顆牙齒,太正常了。
uj5u.com熱心網友回復:
明白了,應該用和的補碼判斷溢位
我直接算原碼的和了
就是沒有判斷溢位。。。
uj5u.com熱心網友回復:
謝謝各位大佬
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/251087.html
標籤:C語言
上一篇:代碼新手小白 出了問題不知道咋解決 球球救救孩子吧我哭了
下一篇:顯示函式重復定義怎么解決?
