溢出判断 补码定点加减运算判断溢出有三种方法。
(1)用一位符号位判断溢出。对于加法,只有在正数加正数和负数加负数两种情况下才可能出现溢出,符号不同的两个数相加是不会出现溢出的。对于减法,只有在正数减负数或负数减正数两种情况下才可能出现溢出,符号相同的两个数相减是不会出现溢出的。因此在判断溢出时可以根据参加运算的两个数据和结果的符号位进行;两个符号位相同的补码相加,如果和的符号位与加数的符号相反,则表明运算结果溢出;两个符号位相反的补码相减,如果差的符号位与被减数的符号位相反,则表明运算结果溢出。这种方法需要判断操作是加法还是减法,以及运算结果与操作数的符号关系。
符号不同的两个数相加不会产生溢出的原因是字长为n+1位时,数值部分为n位,数值部分的最大绝对值为2n。如果参加运算的两个数x和y的绝对值都小于2n,则(+x)+(-y)和(-x)+(+y)的绝对值都不会大于2n,因此只需考虑(+x)+(+y)和(-x)+(-y)的情况,这时结果z的符号应与x和y的符号相同,即当x0=1且y0=1时,z0=0说明数据溢出;或者当x0=0且y0=0时,z0=1说明数据溢出。这样可列出下表所示的判断逻辑的真值表。
(1)用一位符号位判断溢出。对于加法,只有在正数加正数和负数加负数两种情况下才可能出现溢出,符号不同的两个数相加是不会出现溢出的。对于减法,只有在正数减负数或负数减正数两种情况下才可能出现溢出,符号相同的两个数相减是不会出现溢出的。因此在判断溢出时可以根据参加运算的两个数据和结果的符号位进行;两个符号位相同的补码相加,如果和的符号位与加数的符号相反,则表明运算结果溢出;两个符号位相反的补码相减,如果差的符号位与被减数的符号位相反,则表明运算结果溢出。这种方法需要判断操作是加法还是减法,以及运算结果与操作数的符号关系。
符号不同的两个数相加不会产生溢出的原因是字长为n+1位时,数值部分为n位,数值部分的最大绝对值为2n。如果参加运算的两个数x和y的绝对值都小于2n,则(+x)+(-y)和(-x)+(+y)的绝对值都不会大于2n,因此只需考虑(+x)+(+y)和(-x)+(-y)的情况,这时结果z的符号应与x和y的符号相同,即当x0=1且y0=1时,z0=0说明数据溢出;或者当x0=0且y0=0时,z0=1说明数据溢出。这样可列出下表所示的判断逻辑的真值表。
|
