tips:原码补码正负数的关系;原码补码表示范围;移位运算可能出现错误和精度降低;溢出,上溢,下溢;
第一次写博客,希望能和大家交流一下。如果觉得宝宝写得还可以,求爸爸点个赞!刚起步的小学渣需要支持??
如有错误,希望能评论一下,我会修改,共同进步!冲鸭!(用颜色表示求赞的决心!)
计算机中的运算方法 无符号数和有符号数 真值(正负号)和机器数(0和1,即原码),都是二进制数。原码(2^n + x)、补码[2^(n+1) + x]、反码[2^(n+1)-1 + x] ——都是X为负数的时候变化。移码 (2^n + x) ——无论正负都要变化,不涉及小数,通常做阶码。1表示+,0表示-。相反数的关系:
原码:符号位取反反码:包括符号位全部取反补码:包括符号位全部取反后加一补码和移码无论正负数(包括0)符号位相反,数值位相同。0的表示:移码和补码正负数的表示相同。原码和反码都有+-0之分。
表示范围(8位):
无符号数:【0,2^8-1】原码:【-(2^7-1),+(2^7-1)】反码:【-(2^7-1),+(2^7-1)】补码:【-128,+(2^7-1)】-128的补码规定为1000 0000数的定点表示和浮点表示定点表示:没有特定的硬件表示小数点,用约定的方式表示。位于符号位后一位或者最小位后一位。
浮点表示:N=S×r^j;S,j都为小数,且可正可负。
定点运算 溢出的判断单符号位:符号位的进位和最高位的进位做异或,1表示有溢出
双符号位(补码用):00为+,11为 - ;01表示上溢(两个正数溢出),10表示下溢(两个负数溢出)。只有同符号数相加,才可能溢出。
移位运算左移扩大2倍,右移缩小2倍
左移丢1(负数补码丢0),出现运算错误;右移丢1,精度降低。
原码左移右移0,1101(13)0,1010(10)❌0,0110(6)精度降低0,0110(6)0,1100(12)✔0,0011(3)✔补码
左移右移1,0011(-13)1,0110(-10)❌1,1001(7)✔
补码丢0,没有精度丢失,
0舍1入为7
逻辑移位:无符号数的移位。左移右移都补0。算术移位:原码:都补0;补码:左移补0,右移补符号位;正数补0,负数补1原码乘法 符号位单独运算做异或,数值部分绝对值进行乘法运算n次加,n次移位逻辑右移:最低位最先运算,右移把最低位算出的结果移到总结果的最低位,所以右移。绝对值进行乘法运算,而且可能发生溢出,所以逻辑移位。 ps:实际结果为0.1011,0110由于位数有限,所以结果为0.1011。而且右移过程可能会出现精度降低问题。补码乘法——Booth算法与原码乘法相同的区别:(假设x×y)
符号位参与运算,最后的符号位自动生成。补码右移(算术右移)乘数后添加一位0。判断a = Yn+1-Yn,若a<0,部分积+【-x】补;若a>0,加【x】补;若a=0,加0。
浮点数的规格化
原码:无论正负,第一位为1
补码:符号位和第一位不同
(基数不同规格化有区别,通常考原码,基数为2,第一位不为0;基数为4,前两位不为0;……)
特例:[-1/2]补 = 1.10000不是规格化数。[-1]补=1.00000是规格化数。
左归:尾数左移一位,阶码减1,直到符号位和第一位不同。左归可能归多次。
右归:当尾数溢出时(出现01,10),需要右归,尾数右移一位,阶码加1。右归只归一次。
浮点数的加减运算 对阶;(小阶向大阶看齐。防止出现溢出)求阶差。尾数求和。规格化。舍入(0舍1入;恒置1)多计算两位,判断舍入。
例1 两浮点数x = 2101×0.11011011,y = 2111×(-0.10101100)。假设尾数在计算机中以补码表示,可存储10位尾数,2位符号位,阶码以补码表示,双符号位,求x+y。
解:将x,y转换成浮点数据格式
[x]浮 = 00 101, 00.11011011
[y]浮 = 00 111, 11.01010011+1
00 111, 11.01010100
步骤1:对阶,阶差为Ex-Ey
-Ey=11000+1=11001
Ex-Ey=00101+11001=11110=-2 < 0
Ex-Ey<0 Ex<Ey 小阶对大阶,
X阶码加2 X尾数右移2位
[x]浮 = 00 111, 00.00110110(11)
步骤2:尾数求和
[X+Y]浮 = 00 111, 00.00110110(11)
+ 00 111, 11.01010100
= 00 111, 11.10001010(11) ——多写两位,用于舍入
步骤3:计算结果规格化
[X+Y]浮 为非规格化数,左归一位, 阶码减一,
00110, 11.00010101(1)
步骤4:舍入处理
[X+Y]浮 = 00 110, 11.00010110 (0舍1如法)
[X+Y]浮 = 00 110, 11.00010101 (截去法)
目录
计算机中的运算方法
无符号数和有符号数
数的定点表示和浮点表示
定点运算
溢出的判断
移位运算
原码乘法
补码乘法——Booth算法
浮点数的规格化
浮点数的加减运算
逻辑实现(最后再补)
目录
计算机中的运算方法
无符号数和有符号数
数的定点表示和浮点表示