對於兩個w位寬的有符號整數來說, 其能夠表示的範圍在-2的w-1次方到2的w次方-1之間。因此有兩種情況能夠使兩個數相加溢位。
(1)同符號數相加
(2)異符號數相減
如果溢位,那麼相加的結果超過了能夠表示的範圍,則有可能出現兩個正數相加得到乙個負數,所以相加的結果小於兩個加數。或兩個負數相加得到乙個正數,所以相加的結果大於兩個加數。
判斷兩個有符號整數相加是否溢位的判斷如下
#define flase (0)
#define ture (1)
bool add(int a, int b, int *c)
無符號和有符號數底層溢位判斷
無符號和有符號數進行運算,在機器層面上所做運算相同,編譯器區分兩種運算是否溢位,依賴於cf carry flag 和of over flag 位。最高位出現進製置1,否則置0。例 1000 cf置1 1 0000 最高位和次高位進製不同置1,相同置0。例 1000 of置1 1 0000 1100 ...
C語言有符號數和無符號數的判斷方法
計算機中的整數分為無符號數和有符號數,假設字長2位元組 4個16進製制數組成,w 16 有符號數有三種儲存方法 補碼 反碼和原碼,一般計算機都採用補碼來存。需要明確的是如果乙個數本身小於0,那麼肯定為有符號數,無須判斷。以下假設預判斷的數 a 0,不考慮溢位。由該性質知,對無符號數取反,將得到正值 ...
有符號數和無符號數條件判斷時的坑
在嵌入式程式設計過程中,最長接觸到的就是無符號數,但也不可避免的會遇到有符號數,當有符號數與無符號數相遇時,總會發生一些 奇妙的玄學 而這 玄學 稍有不慎就會造成無法彌補的錯誤。來看下面一段 include void main void else 這段 輸出的結果會是什麼呢?有點意思,5居然不大於 ...