溢位是指運算結果超過了數的表示範圍。通常,稱大於機器所能表示的最大正數為上溢,小於機器所能表示的最小負數為下溢。
計算機使用固定長度的機器數來表示數的,其所能表示的範圍是有限的。運算結果超過了這個範圍就溢位了。
兩正數相加(或正數減負數)可能產生上溢;兩負數相加(或負數減正數)可能產生下溢。
補碼減法也是用加法器實現的,因此,補碼加/減運算最後都可以轉化為a補+b補。
加法溢位的情況是:正數+正數可能。產生溢位(上溢),負數+負數可能產生溢位(溢位)
(1)採用一位符號位
a補,b補的符號相同,結果與它們不同,則結果溢位。
解釋:補碼加法時,符號位與數值位一起參加運算,如果結果超過正數範圍(如0111,超過這個最大正數,機器數就往1000、1001...這個方向)符號位會變成1,下溢也是同理(超過1111,機器數會往0000、0001...,符號位變為0)
(2)採用雙符號位
結果符號s1s2= 00結果為正,無溢位;
01表示結果正溢位;
10表示結果負溢位;
11結果為負數,無溢位
(3)採用一位符號位根據資料位的進製情況判斷溢位
符號位的進製與最高資料位的進製相同,則說明沒有溢位,否則發生溢位。
解釋:加法符號位有幾種種情況:
0+0=0(資料位和符號位均沒進製,沒溢位);0+0=1(符號位沒進製,資料位進1位,溢位,上溢);
0+1=1(符號位和資料位均沒進製,沒溢位);0+1=0(符號位和資料位均進製,沒溢位);
1+1=1(資料位和符號位均進1位,沒溢位);1+1=0(符號位進1位,資料位沒進製,溢位,下溢)
綜上,溢位的充要條件是符號位進製與資料位進製不同
of=1表示溢位,of=0表示沒溢位
cf=1表示最高位向前有進製或遊位,cf=0表示最高位沒有向前進製或遊位。
溢位OF和進 借位CF標誌位的判定
cf是無符號數溢位標誌,of是有符號數溢位標誌。通俗一點說就是,即使有符號數相加 相減導致了cf 1也沒什麼意義,不能說明結果的正確與否。此時,of 1,則說明結果溢位,出現錯誤 of 0,說明結果正確。這個過程根本和cf沒關係,cf 1 0,都不會影響。同理也 可以得出of對無符號數也無影響。方法...
CLR via C 列舉型別和位標誌
列舉型別 具有以下特性 1.c 中列舉型別繼承自基礎型別 byte,sbyte,short,ushort,int 預設 uint,long,ulong 但是il中列舉型別繼承自system.enum,並且內部定義了一組常量欄位和乙個例項字段。其中常量欄位的型別為列舉型別,常量欄位名稱為符號名稱,常量...
第15章 列舉型別和位標誌
enumeration提供了一些非常炫酷的功能,相信大多數開發人員都不熟悉。這些新功能極大的簡化了應用程式開發。列舉型別 enumerated types 定義了一組 符號名稱 值 配對。以下color型別定義了一組符號,每個符號都標識一種顏色 internal enum color white,賦...