移位
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
定点数运算
定点数运算包括移位、加、减、乘、除几种。
一、移位运算
1.移位的意义
移位运算在日常生活中常见。例如15米可写作1500厘米,单就数字而言,1500相当于小数点左移了两位,并在小数点前面添了两个0;同样15也相当于1500相对于小数点右移了两位,并删去了小数点后面的两个0。可见,当某个十进制数相对于小数点左移n位时,相当于该数乘以10n;右移n位时,相当于该数除以10n。
计算机中小数点的位置是事先约定的,因此,二进制表示的机器数在相对于小数点作n位左移或右移时,其实质就便该数乘以或除以2n(n=1,2...n)。
移位运算又叫移位操作,对计算机来说,有很大的实用价值,例如,当计算机没有乘(除)运算线路时,可以采用移位和加法相结合,实现乘(除)运算。
计算机中机器数的字长往往是固定的,当机器数左移n位或右移n位时,必然会使其n位低位或n位高位出现空位。那么,对空出的空位应该添补0还是1呢这与机器数采用有符号数还是无符号数有关,对有符号的移位叫算术移位。
2.算术移位规则
对于正数,由于[x]原=[x]补=[x]反=真值,故移位后出现的空位均以0添之。对于负数,由于原码、补码和反码的表示形式不同,故当机器数移位时,对其空位的添补规则也不同。下表列出了三种不同码制的机器数(整数或小数均可),分别对应正数或负数,移位后的添补规则。必须注意的是:不论是正数还是负数,移位后其符号位均不变,这是算术移位的重要特点。
不同码制机器数移位后的空位添补规则
码制添补代码正
数
原码、补码、反码0
原码0
负数补码左移添0
右移添1反码1
由上表可得出如下结论:
(1)机器数为正时,不论左移或右移,添补代码均为0。
(2)由于负数的原码其数值部分与真值相同,故在移位时只要使符号位不变,其空位均添0。
(3)由于负数的反码其各位除符号位外与负数的原码正好相反,故移位后所添的代码应与原码相反,即全部添1。
(4)分析任意负数的补码可发现,当对其由低位向高位找到第一个“1”时,在此“1”左边的各位均与对应的反码相同,而在此“1”右边的各位(包括此“1”在内)均与对应的原码相同,即添0;右移时困空位出现在高位,则添补的代码应与反码相同,即添1。
例:设机器数字长为8位(含一位符号位),若A=±26,写出三种机器数左、右移一位和两位后的表示形式及对应的真值,并分析结果的正确性。
解:(1)A=+26=(+11010)2
则[A]原=[A]补 =[A]反=0,0011010
移位结果表示如下:
移位操作机器数对应的真
值
[A]原=[A]补=[A]反
移位前0,0011010+26
左移一
位
0,0110100+52
左移两
位
0,1101000+104
右移一
位
0,0001101+13
右移两
位
0,0000110+6
可见,对于正数,三种机器数移位后符号位不变,左移时最高数位丢1,结果出错;右移时最低数位丢1,影响精度。
(2)A=-26=(-11010)2
三种机器数移位结果示于下表。
移位操作机器数对应的真值
移位前原
码1,0011010-26
左移一位1,0110100-52左移两位1,1101000-104右移一位1,0001101-13右移两位1,0000110-6
移位前补
码1,1100110-26
左移一位1,1001100-52左移两位1,0011000-104
右移一位
1,1110011-13
右移两位1,1111001-7
移位前反
码1,1100101-26
左移一位1,1001011-52
左移两位1,0010111-104
右移一位1,1110010-13
右移两位1,1111001-6
可见,对于负数,三种机器数移位后符号位均不变。负数的原码左移时,高位丢1,结果出错;低位丢1,影响精度。负数的补码左移时,高位丢0,结果出错;低位丢1,影响精度。负数的反码左移时,高位丢0,结果出错;低位丢0,影响精度。
下图示意了机器中实现算术左移和右移操作的硬件框图。其中(a)真值为正的三种机器数的移位操作;(b)负数原码的移位操作;(c)负数补码的移位操作;(d)负数反码的移位操作。
3.算术移位和逻辑移位的区别
有符号数的移位称为算术移位,无符号数的移位称为逻辑移位。逻辑移位的规则是:逻辑左移时,高位移出,低位添0;逻辑右移时,低位移出,高位添0。例如,寄存器内容为0 1010011,逻辑左移为1010010,算术左移为00100110 (最高数位“1”移丢)。又如寄存器内容为,逻辑右移为01011001。若将其视为补码,算术右移为。显然,两种移位的结果是不同的。上例中为了避免算术左移时最高数位丢1,可采用带进位(Cy)的移位,其示意图如下图所示。算术左移时,符号位移至Cy,最高数位就可避免移出。
二、加法与减法运算
加减法运算是计算机中最基本的运算,因减法运算可看作被减数加上一个减数的负值,即A-B=A+(-B),