1樓:吳愜沈昂傑
運算的結果大於數值裝置所能表示數的範圍,就會產生溢位。
如何判斷補碼溢位:
可以通過最高位與次高位進位來判斷:若最高數值位向符號位的進位值與符號位產生的進位輸出值不相同,則表明加減運算產生了溢位。
溢位現象應當作一種故障來處理,因為它使結果數發生錯誤。異號兩數相加時,實際是兩數的絕對值相減,不可能產生溢位,但有可能出現正常進位;同號兩數相加時,實際上是兩數的絕對值相加,既可能產生溢位,也可能出現正常進位。
由於補碼運算存在符號位進位自然丟失而運算結果正確的問題,因此,應區分補碼的溢位與正常進位。
補碼溢位詳解:
128=1000
0000,8位機器
[-128]原碼
=1000
0000發生了溢位,最高位表示符號位:0為正數,1為負數[-128]反碼
=1111
1111除符號位外,各位取反
[-128]補碼
=1000
0000
反碼的末位加1,不能影響符號位
2樓:做而論道
什麼是溢位?
溢位,是指資料的大小,超出了編碼所能表示的範圍。
發生溢位時,該組編碼,就不能正確的表示資料。
不僅是補碼計算,任何形式的計算,都可能產生溢位。
比如:1999 年、2000 年 ...,這是用 4 位十進位制表示。
當到了 9999 年,再過一年,你如果還用 4 位表示,就會溢位了。
如果不限制編碼的位數,那麼,就不存在溢位的問題。
無符號數的溢位
計算機所能運算的位數是固定的,如:八位機、16、32、64 位機。
當字長為八位時,其計數範圍是:0000 0000~1111 1111。
它們可以表示【自然數】,寫成十進位制就是:0~255。
在小學學過的【自然數】,在計算機專業,被偷改為「無符號數」。
如果在其最大值(255)再加上一,就會超出表示範圍,發生溢位。
此時,八個位就都為 0,進位將為 1。
進位為 1,就是無符號數溢位的標誌。
進位 1,代表十進位制的 256。
256 是八位二進位制**的計數週期,又被計算機專業改稱為「模」。
帶符號數的溢位
八位二進位制也能表示【整數】,包括了【正整數、零和負整數】。
在小學學過的【整數】,在計算機專業,被偷改為「帶符號數」。
此時,0 ~ 127,就直接代表【零和正整數】;
128~255,是以補碼代表【負整數】,即代表-128~-1。
在正數最大值(+127)上再加+1,就會超出表示範圍,發生溢位。
此時得到的是 128,這是負數(-128)的補碼。
注意,此時的進位為 0,結果的符號錯誤,才是溢位的特徵。
在負數最小值(-128)再加-1,也會超出範圍,發生溢位。
計算如下:
1000 0000
+ 1111 1111
(1) 0111 1111
此時,竟然得到了正數(+127)!
注意,此時的進位為 1,並無意義。
結果的符號錯誤,才是溢位的特徵。
「帶符號數」溢位的特徵是:運算結果的符號,與正常結果相反。
「帶符號數」的溢位,與進位是 1 是 0,並無關係。
判斷是否溢位的方法
因為「帶符號數」運算髮生溢位,必定是結果超出範圍。
所以,只有如下四種運算,才有可能出現溢位:
正數+正數、負數+負數、正數-負數、負數-正數。
其它運算如:正-正、...,就不必考慮溢位了。
由人工計算:就可根據資料的符號來判斷,如:
正+正,出現負的結果;
負+負,出現正的結果;
發生上述四種之一,就是溢位。
也可考查進位與次高位的進位,兩者不同,就是溢位。
用 cpu 計算:cpu 能夠自動判斷,如果發生溢位則會置位 of。
補碼運算為什麼會溢位
3樓:沙裡波特
運算的結果大於數值裝置所能表示數的範圍,就會產生溢位。
正數+正數,得到的和,太大了,就會溢位。
此外還有:負數+負數、正數-負數、負數-正數,
這四種演算法,都有可能溢位。
而:正數-負數,等四種,是絕對不會溢位的。
知道了這些,就不用「濫判斷」是否溢位了。
八位的補碼是:0000 0000~1111 1111。
寫成十進位制就是:0~255。
其中的 0~127,是正數的補碼。
而 128~255,則是-128~-1 的補碼。
所能表示的範圍是:-128~+127。
按照補碼運算:99 + 87 = 186。
超出了所能表示的範圍,當然是溢位了。
即:正99+正87,卻得到了-70 的補碼。
4樓:柒月黑瞳
運算的結果大於數值裝置所能表示數的範圍,就會產生溢位。
如何判斷補碼溢位:
可以通過最高位與次高位進位來判斷:若最高數值位向符號位的進位值與符號位產生的進位輸出值不相同,則表明加減運算產生了溢位。
溢位現象應當作一種故障來處理,因為它使結果數發生錯誤。異號兩數相加時,實際是兩數的絕對值相減,不可能產生溢位,但有可能出現正常進位;同號兩數相加時,實際上是兩數的絕對值相加,既可能產生溢位,也可能出現正常進位。 由於補碼運算存在符號位進位自然丟失而運算結果正確的問題,因此,應區分補碼的溢位與正常進位。
補碼溢位詳解:
128 =1000 0000,8位機器
[-128]原碼 = 1000 0000發生了溢位,最高位表示符號位:0為正數,1為負數
[-128]反碼 = 1111 1111除符號位外,各位取反
[-128]補碼 = 1000 0000 反碼的末位加1,不能影響符號位
5樓:做而論道
用8位二進位制數來說明。
8位數中的最高位,是符號位,後面七位,是數值位。
按照這樣的規則,8位二進位制數的補碼,只能表示出-128~+127。
99和87,它們都在-128~+127之內,可以用8位二進位制數的補碼來表示。
但是它們相加後,就超過了-128~+127,它們的七位數值位產生了進位,把符號位變成了1,結果,按照補碼的規則,就成了負數。
這個錯誤的結果,就是**於「溢位」。
「溢位」的原因就是結果的數字太大,超出了8位補碼所能表示的範圍。
6樓:張顯寅
99d=2^6+2^5+2^1+2^0=0110 0011b87d=2^6+2^4+2^2+2^1+2^0=0101 0111b0110 0011b
0101 0111b
1011 1010b
即99d+87d=1011 1010b
1011 1010b
取反為0100 0101b
加1為0100 0110b
即(99d+87d)的補碼=0100 0110b 無溢位因為99d+87d=186d
對於無符號8位二進位制數來說186d在0 - (2^8)-1即0 - 255這個區間當中 故無溢位
另外計算補碼有個更加方便的公式
對於99d+87d=186d這個數在0 - 255 這個區間當中 那麼
186d可以看作無符號8位二進位制數
那麼186d的補碼=256d-186d=70d即(99d+87d)的補碼=70d=0100 0110b=106o=46h
7樓:匿名使用者
無論採用何種機器數,只要運算的結果大於數值裝置所能表示數的範圍,就會產生溢位。
如何判斷補碼溢位:
可以通過最高位與次高位進位來判斷:若最高數值位向符號位的進位值與符號位產生的進位輸出值不相同,則表明加減運算產生了溢位。
溢位現象應當作一種故障來處理,因為它使結果數發生錯誤。異號兩數相加時,實際是兩數的絕對值相減,不可能產生溢位,但有可能出現正常進位;同號兩數相加時,實際上是兩數的絕對值相加,既可能產生溢位,也可能出現正常進位。 由於補碼運算存在符號位進位自然丟失而運算結果正確的問題,因此,應區分補碼的溢位與正常進位。
只有有符號數存在溢位,無符號數不存在溢位~
補碼計算為什麼會溢位??
8樓:沙裡波特
溢位,是指資料的大小,超出了編碼所能表示的範圍。
不僅是補碼計算,任何形式的計算,都可能產生溢位。
比如:1999 年、2000 年 ...,這是用 4 位十進位制表示。
當到了 9999 年,再過一年,你如果還用 4 位表示,就會溢位了。
9樓:解騫
所謂溢位是指資料的大小超出了編碼的表數範同圍。例如字長為8,補碼的表數範圍是-128d(1000 0000b)至+127d
(0111 1111b)。現有兩數求和127+1。按補碼運算為0111 1111+0000 0001=1000 0000
補碼1000 0000b的真值為-128d。而127+1的正確結果應該是+128,超出了表數範圍,溢位了。
10樓:做而論道
什麼是溢位?
溢位,是指資料的大小,超出了編碼所能表示的範圍。
不僅是補碼計算,任何形式的計算,都可能產生溢位。
比如:1999 年、2000 年 ...,這是用 4 位十進位制表示。
當到了 9999 年,再過一年,你如果還用 4 位表示,就會溢位了。
如果不限制位數,就不存在溢位的問題。
無符號數的溢位
計算機所能運算的位數是固定的,如:八位機、16、32、64 位機。
當字長為八位時,其計數範圍是:0000 0000~1111 1111。
用它們表示十進位制的【自然數】,就是:0~255。
在小學學過的【自然數】,在計算機專業中稱為「無符號數」。
如果在其最大值(255)再加上一,就會超出表示範圍,發生溢位。
此時,八個位就都為 0,進位將為 1。
進位為 1,就是無符號數溢位的標誌。
進位 1,代表十進位制的 256。256 也就是八位二進位制數的計數週期。
帶符號數的溢位
八位二進位制也能表示【整數】,包括【正整數、零和負整數】。
在小學學過的【整數】,在計算機專業中稱為「帶符號數」。
此時,0 ~ 127,就直接代表【零和正整數】;
128~255,是以補碼代表【負整數-128~-1】。
在正數最大值(127)上再加+1,就會超出表示範圍,發生溢位。
此時得到是負數(128)。
注意,此時的進位為 0,結果的符號錯誤,才是溢位的特徵。
在負數最小值(-128)再加-1,也會超出範圍,發生溢位。
計算如下:
1000 0000
+ 1111 1111
(1)0111 1111
得到的是正數(127)。
注意,此時的進位為 1,並無意義。
結果的符號錯誤,才是溢位的特徵。
因為「帶符號數」運算髮生溢位,必定是結果超出範圍。
所以,只有如下四種運算,才有可能出現溢位:
正數+正數、負數+負數、正數-負數、負數-正數。
「帶符號數」的溢位,與進位並無關係。
溢位的特徵是:運算結果的符號,與正常結果相反。
判斷是否溢位的方法
由人工計算:就可根據符號位來判斷,如:
正+正,出現負的結果;
負+負,出現正的結果;
發生上述四種之一,就是溢位。
也可考查進位與次高位的進位,兩者不同,就是溢位。
用 cpu 計算:它就能自動判斷,如果發生溢位則會令 of=1。
負數在計算機中是用補碼錶示嗎?為什麼?我是新手,請大神指點,謝謝
是的。補碼最大的好處是可以把減法運算等同於加法運算。這樣在alu中只需要包含加法運算電路即可,大大簡化了cpu的電路結構。計算機中,只用補碼錶示正負數。在計算機中,並不存在原碼反碼。求補碼,也有更簡單的方法,也用不著原碼反碼。所以,原碼反碼,都沒有任何用處。以八位碼長,來說明計算機中的補碼 數字 0...
C運算子過載為什麼流運算子不能過載為成員函式
class object如果實現了成員operator 呼叫其物件格式o 載運算子為成員函式後,當呼叫該運算子時,左運算元必須是該類的例項。友元函式 流引數定義第一個引數.才能呼叫cout 雖然不能 過載 為成員函式,但是可以定義為新的成員函式,只不過使用習慣和常例不符而已。試想一下這一點 將我們的...
為什么會這樣,為什麼會這樣
你可以試圖啟發啟發她,看看她有沒有悔改之心。我以前也有個朋友,跟她做了10年的同學,後來也幾乎變了。但是其實她也是有原因的,可以試著瞭解她。如果她真的沒有悔改之心,那也只能怪你自己交友不慎 你應該和她做朋友,不過你要勸她不要再去和那些人交往了,不然的話她會學了那群人的壞習慣的.可以和她做朋友的,嘗試...