考试之前没写,考完才写,服了....
2018/12/15 计算机组成原理复习
设一个二进制整数补码有n+1位(含一位符号位$x_n$),即
$$ [x]_补 = x_nx_{n-1}x_{n-2}...x_1x_0 $$
则其补码表示的真值为
$$ x = -2^nx_n + \sum_{i=0}^{n-1}2^ix_i $$
例1 已知$[x]_补 = 110011011$ 求$x = ?$
解:利用公式求得
$$ x = -1\times2^8 + 1\times2^7+0\times2^6+0\times2^5+1\times2^4+1\times2^3+0\times2^2+1\times2^1+1\times2^0=-101 $$
例2 设x为整数,$[x]_补 = 1,x_1x_2x_3x_4x_5$,若要求$x<-16$,试问$x_1~x_5$应取何值
解:利用公式得
$$ x = -1\times2^5+x_1\times2^4+x_2\times2^3+x_3\times2^2+x_4\times2^1+x_5\times2^0 $$
因为$-1\times2^5=-32$,所以无论$x_1~x_5$取何值,一定满足$x<-16$
$[+0.0000]_补 = 0.0000$
$[-0.0000]_补 = 2+(-0.0000) = 10.0000 - 0.0000 = 0.0000$
显然$[+0]_补 = [-0]_补 = 0.0000$,即补码中“零”只有一种表示形式
对于小数,若$x = -1$,则根据小数补码的定义,有$[x]_补 = 2+x=10.0000-1.0000=1.0000$. 可见,-1本不属于小数范围,但却有$[-1]_补$存在,这是由于补码中的零只有一种表示形式,故它比原码能多表示一个"-1"
例1 写出$[x]_补 = 1.0000$对应的$[x]_原$和$x$
解:$[x]_原$不存在,$x = -1$
例2 写出$[x]_补 = 1,0000$对应的$[x]_原$和$x$
解:$[x]_原$不存在,$x = -16$
设机器数字长为8位(含1位符号位在内),分整数和小数两种情况讨论$x$为何值时,$[x]_原=[x]_补$成立
解:当$x$为小数时,若$x≥0$,则$[x]_补=[x]_原$成立;若$x<0$,当$x=-\frac{1}{2}$,$[x]_补 = [x]_原=1.1000000$,则$[x]_补=[x]_原$成立
当$x$为整数时,若$x≥0$,则$[x]_补=[x]_原$成立;若$x<0$,当$x=-64$,$[x]_补 = [x]_原=1,1000000$,则$[x]_补=[x]_原$成立
设浮点数格式为:阶码5位(含1位阶符),尾数11位(含1位数符)。写出$\frac{51}{128}$、$-\frac{27}{1024}$、$-86.5$对应的机器数。要求如下:
(1)阶码和尾数均为原码
(2)阶码和尾数均为补码
(3)阶码为移码,尾数为补码
解:令$x_1=\frac{51}{128}$,$x_2=-\frac{27}{1024}$,$x_3=-86.5$
(1)
$[x_1]_原 = 1,0001;0.1100110000$
$[x_2]_原 = 1,0101;1.1101100000$
$[x_3]_原 = 0,0111;1.1010110100$
(2)
$[x_1]_补 = 1,1111;0.1100110000$
$[x_2]_补 = 1,1011;1.0010100000$
$[x_3]_补 = 0,0111;1.0101001100$
(3)
$[x_1]_{阶移尾补} = 0,1111;0.1100110000$
$[x_2]_{阶移尾补} = 0,1011;1.0010100000$
$[x_3]_{阶移尾补} = 1,0111;1.0101001100$
设机器数字长为16位,写出下列各种情况它能表示的数的范围。设机器数采用1位符号位
(1)无符号数
(2)原码表示的定点小数
(3)补码表示的定点小数
(4)补码表示的定点整数
(5)原码表示的定点整数
解:
(1)$0到2^{16}-1$
(2)$-1+2^{-15}到1-2^{-15}$
(3)$-1到1-2^{-15}$
(4)$-2^{15}到2^{15}-1$
(5)$-2^{15}+1到2^{15}-1$
逻辑左移、算术左移、逻辑右移、算术右移的区别
- 逻辑左移=算术左移,右边统一添0
- 逻辑右移,左边统一添0
- 算术右移,左边添加符号位的值
- 逻辑移位没有溢出的说法;算术右移不会产生溢出
对于正数,三种机器数算术移位后符号位均不变,左移时高位丢1,结果出错;右移时最低位丢1,影响精度
对于负数,三种机器数位移后符号位均不变
- 负数的原码,左移高位丢1时,结果出错;右移低位丢1时,影响精度
- 负数的补码,左移高位丢0时,结果出错;右移低位丢1时,影响精度
- 负数的反码,左移高位丢0时,结果出错;右移低位丢0时,影响精度
设机器数字长为8位(含1位符号位),对下列各机器数进行算术左移一位,算术右移一位,讨论结果是否正确
$[x_1]_原 = 0.0011010;[y_1]_补 = 0.1010100;[z_1]_反 = 1.0101111$
$[x_2]_原 = 1.1101000;[y_2]_补 = 1.1101000;[z_2]_反 = 1.1101000$
$[x_3]_原 = 1.0011001;[y_3]_补 = 1.0011001;[z_3]_反 = 1.0011001$
解:算术左移一位
$[x_1]_原=0.0110100$ 正确,$[x_2]_原 = 1.1010000$ 溢出,$[x_3]_原 = 1.0110010$ 正确
$[y_1]_补=0.0101000$ 溢出,$[y_2]_补 = 1.1010000$ 正确,$[y_3]_补 = 1.0110010$ 溢出
$[z_1]_反= 1.1011110$ 溢出,$[z_2]_反 = 1.1010000$ 正确,$[z_3]_反 = 1.0110010$ 溢出
算术右移一位
$[x_1]_原=0.0001101$ 正确,$[x_2]_原 = 1.110100$ 正确,$[x_3]_原 = 1.1001100$ 影响精度
$[y_1]_补=0.0101010$ 正确,$[y_2]_补 = 1.1110100$ 正确,$[y_3]_补 = 1.1001100$ 影响精度
$[z_1]_反= 1.1010111$ 正确,$[z_2]_反 = 1.1110100$ 影响精度,$[z_3]_反 = 1.1001100$ 正确
设机器数字长为8位(含1位符号位),用补码运算规则计算下列各题
(1)$A = \frac{9}{64},B = -\frac{13}{32}$,求$A + B$
(2)$$A = \frac{19}{32},B = -\frac{17}{128}$$,求$A - B$
(3)$A = -87,B = 53$,求$A - B$
(4)$A = 115,B = -24$,求$A + B$
解
(1)由于$A = 0.0010010,B = 1.0110100$,所以$[A]_补 = 0.0010010,[B]_补 = 1.1001100$,则$[A+B]_补 = 1.1011110$,即$A + B = 1.0100010$
(2)由于$A = 0.1001100,B = 1.0010001$,所以$[A]_补 = 0.1001100,[-B]_补 = 0.0010001$,因为$[A-B]_补 = [A]_补 + [-B]_补 = 0.1011101$,即$A - B = 0.1011101$
(3)由于$A = 1,1010111,B = 0,0110101$,所以$[A]_补= 1,0101001,[-B]_补 = 1,1001011$,则$[A]_补 + [-B]_补 = 0,1110100$ 溢出
(4)由于$A = 0,1110011,B = 1,0011000$,所以$[A]_补 = 0,1110011,[B]_补 = 1,1101000$,则$[A+B]_补 = 0,1011011$,即$A + B = 0,1011011$
设$x = 2^{-101}\times (-0.101000),y = 2^{-100}\times (+0.111011)$,假设阶符取2位,阶码数值部分取3位,数符取2位,尾数的数值部分取6位,求$x-y$
解:$[x]_补 = 11,011;11.011000,[y]_补 = 11,100;00.111011$
①对阶:小阶向大阶对齐,则$[x]_补^{'} = 11,100;11.101100$
②求和:
$$ [S_x]^{'}_补 - [S_y]^{'}_补 = [S_x]^{'}_补 + [-S_y]^{'}_补 \\ =11.011000+11.000101=10.110001 $$
即 $[x-y]_补 = 11,100;10.110001$,尾数符号位出现"10",需右规
③格式化:右规后得$[x-y]_补 = 11,101;11.011000$
④舍入处理:采用“0舍1入”法,其尾数右规时末位丢1,则有$[x-y]_补 = 11,101;11.011001$
⑤溢出判断:补码表示的阶码符号位为11,不溢出
按机器补码浮点运算步骤计算$[x\pm y]_补$
(1)$x = 2^{-011}\times 0.101100,y = 2^{-010}\times (-0.011100)$
(2)$x = 2^{-011}\times (-0.100010).y = 2^{-010}\times (-0.011111)$
解:
(1)$[x]_补 = 11,101;00.101100,[y]_补 = 11,110;11.100100$
①对阶,$[x]_补 = 11,110;00.010110$
②尾数运算:$[x+y]_补 = 11,110;11.111010,[x-y]_补 = 11,110;00.110010$
③规格化:$[x+y]_补 = 11,011;11.010000$(尾数左规3次,阶码减3);$[x-y]_补$(不变)
④舍入处理:无
⑤溢出:无
(2)$[x]_补 = 11,101;11.011110,[y]_补 = 11,110;11.100001$
①对阶:$[x]_补 = 11,110;11.101111$
②尾数运算:$[x+y]_补 = 11,110;11.010000,[x-y]_补 = 11,110;00.001110$
③规格化:$[x+y]_补 = 11,110;11.010000$(不变);$[x-y]_补 = 11,100;00.111000$(尾数左规2次,阶码减2)
④舍入:无
⑤溢出:无