目录
例子:4位定点小数【x】原=x0.x1x2x3x4,【y】原=y0.y1y2y3y4,则|x|=0.x1x2x3x4,|y|=0.y1y2y3y4
例书3.12【x】原=1.1001,【y】原=0.1011,求【x】原/【y】原
例书3.12【x】原=1.1001,【y】原=0.1011,求【x】原/【y】原
3.1计算机中的运算
C语言中的位运算
“&” “|” “~” “^”
逻辑与,或,非,异或
编译器翻译成对应的机器指令,直接由逻辑门实现
C语言中的逻辑运算
"&&" "||" "!" 属于非数值运算
操作数只有0和1两个值,所有非0值都被当成1处理
翻译时不会对应具体运算指令,而会演变成相应的程序分支结构
C语言中的移位运算
“<<”左移运算:每左移一位,数据就增大一倍(*2)
对应逻辑左移,逻辑左移将高位移出,低位补零
左移可能会因为超出表示范围而发生溢出
">>"右移运算:每右移一位,数据就缩小一半(/2)
无符号数右移:逻辑右移,低位移出,高位补零
有符号数右移:算术右移,低位移出,高位填充原数据的符号位(即符号位扩展)
例子:
C语言中的算术运算
定点数采用补码进行加减运算,符号位参加运算
定点数乘除法根据操作数符号类型进行不同的转换
所有浮点数的算术运算都会被编译成浮点算术运算指令
C语言中的变量与常量之间的乘法或除法运算通常会被编译器进行自动优化(优化目的是提高程序执行的速度,避免复杂的乘除运算。)
3.2定点加减法的运算
补码加法
[X+Y]补=【X】补+【Y】补(mod M)和的补码=补码之和
分四种情况证明
x>0,y>0,则x+y>0
x>0,y<0,则x+y>0或x+y<0
x<0,y>0,则x+y>0或x+y<0
x<0,y<0,则x+y<0
补码减法
[X-Y]补=【X】补+【-Y】补=【X】补-【Y】补(mod M)差的补码=补码之差
求【-Y】补:【-Y】补={【Y】补}补(对【Y】补求补)
补码加法实例
【例3.1】×=0.1010,Y=0.0101,求x+y
【例3.1】 x=-0.1010 , y=-0.0100 ,求 x+y
补码减法实例
【例3.3】×=0.1001,y=0.0110,求x- y
【例3.4】×=-0.1001,Y=-0.0110,求x- y
溢出的概念
运算结果超出数据类型的表示范围
正溢:两个正数相加,结果大于机器所能表示的最大正数
负溢:两个负数相加,结果小于机器所能表示的最小负数
溢出检测(三种方法)
1. 根据操作数和运算结果的符号位是否一致进行检测
2. 根据运算过程中最高数据位的进位与符号位的进位是否一致进行检测
3. 利用变形补码的符号位进行检测
- 根据操作数和运算结果的符号位是否一致进行检测
-
溢出逻辑:正正得负 负负得正
- 设两数符号位为XfYf,结果符号位Sf.溢出检测信号为V,当V为1时,表示发生溢出,则
3.3定点乘法运算
乘法运算实现思路:
1. 利用多位加法器循环累加实现
2. 采用加法器阵列构成组合逻辑电路实现
乘积符号的确定:
根据乘法运算规则,乘积的符号可由两个乘数的符号经过异或逻辑得到
乘积的数值:
由两个乘数的绝对值相乘得到,即:IP|=|x|*|y|
两个n位的数相乘,得到的乘积为2n位
例子:4位定点小数【x】原=x0.x1x2x3x4,【y】原=y0.y1y2y3y4,则|x|=0.x1x2x3x4,|y|=0.y1y2y3y4
例子:x=+0.1101,y=-0.1011,求X*Y
符号为与数据位分开运算,Yn决定累加|x|还是0,连同进位一起右移,可能溢出,移位后正常
3.4定点除法运算
基本原理
商的符号由两个数的符号异或产生,即:
商的数值由两数的绝对值相除得到,即:
运算方法
原码一位除法
手算除法
判断是否够减:
对手算除法进行改进:
(1)通过减法运算比较数的大小,并作为上商的依据
(2) 将除数右移操作改为余数左移操作,并与上商操作一致
恢复余数法
总是用被除数(或部分余数)减去除数,当部分余数为负数(即小于0)时,表示不够减,需要用部分余数加上除数以恢复原来的余数,以便继续运算;当部分余数为正数(即大于0)时,表示够减,可以继续后续运算。归纳为:
例书3.12【x】原=1.1001,【y】原=0.1011,求【x】原/【y】原
【-|y|】补=1.0101
第一次一定不够減
商 Qn=~RO(余数符号位)
R<0时,R=R+Y,恢复余数;
R=2R-Y
商的符号由两数符号异或求得
恢复余数法存在的问题
1. 绝对值运算,余数不可能是负数,当余数是负数时必须恢复余数
2. 恢复余数的次数不确定,运算时间不固定,拖慢除法运算速度
不恢复余数法
例书3.12【x】原=1.1001,【y】原=0.1011,求【x】原/【y】原
总结:
1. 恢复余数的操作次数不确定,运算时间不固定,拖慢除法速度
2. 不恢复余数除法运算步数固定,控制简单,有效提高运算速度
3.5浮点运算
结果舍入处理:右移操作时低位丢失会产生误差
1. 未位恒置1法:只要丢失位中有“1”,就将结果最低位置为1
2. 0舍1入法:丟失数位中最高位1时将尾数未位加1
溢出判断
1. 阶码溢出则结果溢出
2. 溢出检测方法与定点数相同