移位

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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),

相关文档
最新文档