定点数:
参考链接:
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
补充:
双符号位数移位规则: 区别于单符号位数的符号位不动,数值位按规则移动
正数补码移位:
数符不变,空位补零(右移时第二符号位移至尾数最高位)
例如:00.1101左移一位是01.1010,右移一位是00.0110; 01.1101左移一位是01.1010,右移一位是00.1110;
负数补码移位:
规则是左移空位补零,右移空位补一。
例如:11.1101左移一位是11.1010,右移一位是11.1110; 10.1101左移一位是11.1010,右移一位是11.0110