将符号位扩充到二位,采用变形补码 (或称模4补码),就能通过符号位直接判断 是否溢出。变形补码为:{符号位,原数}
变形补码用00表示正,11表示负。 计算结果符号位为:
00—结果为正,无溢出;
11—结果为负,无溢出;
01—结果为正溢出;
10—结果为负溢出;
溢出=Fs1⊕Fs2
注意:数据在主存中仍为单符号,运算时传送 到运算器时扩充成双符号,运算结束后紧缩成 单符号位存入主存中。
原理
对于有符号数相加,产生溢出的情况只可能是两个正数相加或两个负数相加。
逻辑一表示:两个正数相加得到了负数或两个负数相加得到了正数
逻辑二表示:最高有效位产生进位,若结果位正数,则溢出,若为负数,则不溢出
逻辑三表示:若双符号的两位不同,则无法用符号位表示最高位,无法压缩为单符号位
来自同济大学计算机组成原理课程ppt
C语言有两类整数算术运算,有符号运算与无符号运算,在计算两数的加减乘除运算,往往要考虑溢出的情况例:检查两个非负整型变量a+b是否溢出第一种:if(a+b < 0)complain();这种做法是检查内部寄存器的标志位...
C语言有两类整数算术运算,有符号运算与无符号运算,在计算两数的加减乘除运算,往往要考虑溢出的情况
例:检查两个非负整型变量a+b是否溢出
第一种:if(a+b