其他分享
首页 > 其他分享> > 定点数的位移方式和溢出判断

定点数的位移方式和溢出判断

作者:互联网

定点数:

参考链接:

  https://blog.csdn.net/limanjihe/article/details/52440544

漫谈计算机组成原理(九)定点数及定点数的运算 - 云+社区 - 腾讯云 (tencent.com)

定点数的位移运算

移位运算的规则:虽然正数和负数的移位运算规则不相同,但是相同之处在于移位后正数和负数的符号不变。那么规则就变成了移位运算时,符号位不动,数值位按照如下规则进行移位。

 

 

 

无符号整数

溢出情况:(有且仅有正溢出)超出最大表达范围即溢出

例:8位机器数 表达范围:0-255  如果计算的结果超过了这个范围,则会出现溢出现象,最高位无法表达,导致比其中一个加数小

带符号整数

溢出情况:

如何判断有符号数是否发生溢出现象:
1、两个正数相加得到一个负数,则说明发生了正溢出
2、两个负数相加得到一个正数,则说明发生了负溢出

正溢出:

两正数的数值部分相加产生进位到符号位,导致最终的得到的数是负数,导致出现错误

例:127 + 1 = 128 机器数表示 :0111,1111 + 0000,0001 = 1000,0000

负溢出:

例:-128 + -1 = -129 机器数表示 1000,0000 + 1111,1111 = 1,0111,1111(第一位舍去无法表示)

溢出判断方法:(溢出只可能两个正数相加或者两个负数相加)

(1)用一位符号位判断溢出:判断结果的符号位是否与两个操作数的符号位相同,如果不同,则发生溢出

(2)利用数据编码的最高位(符号位)和次高位(数值部分的最高位)的进位状况来判断运算结果是否发生了溢出:

如果进位情况是00,则无溢出;为01,则发生溢出; 为10,则发生溢出;为11,则无溢出

(3)采用双符号位补码进行判断:

正常时两个符号位的值相同,在运算结果中当两个符号位不同时则表明发生了溢出。运算结果的符号位为01表明两个正数相加,结果大于机器所能表示的最大正数,称为上溢;运算结果的符号位为10表明两个负数相加,结果小于机器所能表示的最小负数,称为下溢。也就是说,两个正数相加,数值位不应向符号位同时产生进位,使得结果数的符号位和操作数的一样,为00

例子:

(-10)+(-7)=(-17)

用机器数表示为 11 0110 + 11 1001 = 10 1111 发生溢出

 3 + 2 = 5

用机器数表示为00 0011 + 00 0010 = 00 0101

 

标签:运算,符号,相加,负数,溢出,定点数,正数,位移
来源: https://www.cnblogs.com/SValley/p/14618571.html