定点数的位移方式和溢出判断
作者:互联网
定点数:
参考链接:
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