首页 > 编程知识 正文

浅谈计算机组成原理,计算机组成原理算术运算

时间:2023-05-03 08:39:43 阅读:276637 作者:1805

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算法

浮点数的规格化

浮点数的加减运算

逻辑实现(最后再补)


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

目录

计算机中的运算方法

无符号数和有符号数

数的定点表示和浮点表示

 

 

 

 

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。