标签:
杂谈 |
分类: 第6章运算 |
2. 已知X=0.a1a2a3a4a5a6(ai为0或1),讨论下列几种情况时ai各取何值。
解: (1)若要http://s1/middle/&690,只要a1=1,a2~a6不全为0即可。
(2)若要http://s1/middle/&690,只要a1~a3不全为0即可。
(3)若要http://s1/middle/&690,只要a1=0,a2可任取0或1;
当a2=0时,若a3=0,则必须a4=1,且a5、a6不全为0;
若a3=1,则a4~a6可任取0或1;
当a2=1时, a3~a6均取0。
3. 设x为整数,[x]补=1,x1x2x3x4x5,若要求 x < -16,试问 x1~x5 应取何值?
解:若要x < -16,需 x1=0,x2~x5 任意。(注:负数绝对值大的补码码值反而小。)
4.
设机器数字长为8位(含1位符号位在内),写出对应下列各真值的原码、补码和反码。
解:真值与不同机器码对应关系如下:
真值 |
-13/64 |
29/128 |
100 |
-87 |
二进制 |
-0.001101 |
0.0011101 |
1100100 |
-1010111 |
原码 |
1.001 1010 |
0.001 1101 |
0110 0100 |
1101 0111 |
补码 |
1.1100110 |
0.001 1101 |
0110 0100 |
10101001 |
反码 |
1.1100101 |
0.001 1101 |
0110 0100 |
10101000 |
5. 已知[x]补,求[x]原和x。
[x1]补=1.1100; [x2]补=1.1001;
[x3]补=0.1110;
[x5]补=1,0101; [x6]补=1,1100; [x7]补=0,0111; [x8]补=1,0000;
解:[x]补与[x]原、x的对应关系如下:
[x]补 |
1.1100 |
1.1001 |
0.1110 |
1.0000 |
1,0101 |
1,1100 |
0,0111 |
1,0000 |
[x]原 |
1.0100 |
1.0111 |
0.1110 |
无 |
1,1011 |
1,0100 |
0,0111 |
无 |
x |
-0.0100 |
-0.0111 |
0.1110 |
-1 |
-1011 |
-100 |
0,0111 |
-10000 |
6. 设机器数字长为8位(含1位符号位在内),分整数和小数两种情况讨论真值x为何值时,[x]补=[x]原成立。
解:当x为小数时,若x³ 0,则
若x < 0,当x=
-1/2时,[x]补=[x]原=1.100
0000,则
当x为整数时,若x³0,则
若x< 0,当x= -64时,[x]补=[x]原=1,100 0000,则 [x]补=[x]原成立。
7. 设x为真值,x*为绝对值,说明[-x*]补=[-x]补能否成立。
解:当x为真值,x*为绝对值时,[-x*]补=[-x]补不能成立。原因如下:
(1)当x<0时,由于[-x*]补是一个负值,而[-x]补是一个正值,因此此时[-x*]补=[-x]补不成立;
(2)当x³0时,由于-x*=-x,因此此时 [-x*]补=[-x]补的结论成立。
8. 讨论若[x]补>[y]补,是否有x>y?
解:若[x]补>[y]补,不一定有x>y。 [x]补 > [y]补时 x > y的结论只在 x > 0且y > 0,及 x<0且y<0时成立。
由于正数补码的符号位为0,负数补码的符号位为1,当x>0、 y<0时,有x>y,但则[x]补<[y]补;同样,当x<0、 y >0时,有x < y,但[x]补>[y]补。
9. 当十六进制数9B和FF分别表示为原码、补码、反码、移码和无符号数时,所对应的十进制数各为多少(设机器数采用一位符号位)?
解:真值和机器数的对应关系如下:
9BH |
原码 |
补码 |
反码 |
移码 |
无符号数 |
对应十进制数 |
-27 |
-101 |
-100 |
+27 |
155 |
FFH |
原码 |
补码 |
反码 |
移码 |
无符号数 |
对应十进制数 |
-128 |
-1 |
-0 |
+128 |
256 |
10. 在整数定点机中,设机器数采用1位符号位,写出±0的原码、补码、反码和移码,得出什么结论?
解:0的机器数形式如下:(假定机器数共8位,含1位符号位在内)
真值 |
原码 |
补码 |
反码 |
移码 |
+0 |
0 000 0000 |
0 000 0000 |
0 000 0000 |
1 000 0000 |
-0 |
1 000 0000 |
0 000 0000 |
1 111 1111 |
1 000 0000 |
结论:0的原码和反码分别有+0和-0两种形式,补码和移码只有一种形式,且补码和移码数值位相同,符号位相反。
11. 已知机器数字长为4位(含1位符号位),写出整数定点机和小数定点机中原码、补码和反码的全部形式,并注明其对应的十进制真值。
整数定点机 |
小数定点机 |
||||||
原码 |
补码 |
反码 |
真值 |
原码 |
补码 |
反码 |
真值 |
0,000 |
0,000 |
0,000 |
+0 |
0.000 |
0.000 |
0.000 |
+0 |
0,001 |
0,001 |
0,001 |
1 |
0.001 |
0.001 |
0.001 |
0.125 |
0,010 |
0,010 |
0,010 |
2 |
0.010 |
0.010 |
0.010 |
0.250 |
0,011 |
0,011 |
0,011 |
3 |
0.011 |
0.011 |
0.011 |
0.375 |
0,100 |
0,100 |
0,100 |
4 |
0.100 |
0.100 |
0.100 |
0.500 |
0,101 |
0,101 |
0,101 |
5 |
0.101 |
0.101 |
0.101 |
0.625 |
0,110 |
0,110 |
0,110 |
6 |
0.110 |
0.110 |
0.110 |
0.750 |
0,111 |
0,111 |
0,111 |
7 |
0.111 |
0.111 |
0.111 |
0.875 |
1,000 |
0,000 |
1,111 |
-0 |
1.000 |
0.000 |
1.111 |
-0 |
1,001 |
1,111 |
1,110 |
-1 |
1.001 |
1.111 |
1.110 |
-0.125 |
1,010 |
1,110 |
1,101 |
-2 |
1.010 |
1.110 |
1.101 |
-0.250 |
1,011 |
1,101 |
1,100 |
-3 |
1.011 |
1.101 |
1.100 |
-0.375 |
1,100 |
1,100 |
1,011 |
-4 |
1.100 |
1.100 |
1.011 |
-0.500 |
1,101 |
1,011 |
1,010 |
-5 |
1.101 |
1.011 |
1.010 |
-0.625 |
1,110 |
1,010 |
1,001 |
-6 |
1.110 |
1.010 |
1.001 |
-0.750 |
1,111 |
1,001 |
1,000 |
-7 |
1.111 |
1.001 |
1.000 |
-0.875 |
无 |
1,000 |
无 |
-8 |
无 |
1.000 |
无 |
-1 |
12. 设浮点数格式为:阶码5位(含1位阶符),尾数11位(含1位数符)。写出51/128、-27/1024、7.375、-86.5所对应的机器数。要求如下:
(1)阶码和尾数均为原码。
(2)阶码和尾数均为补码。
(3)阶码为移码,尾数为补码。
解:据题意画出该浮点数的格式:
阶符1位 |
阶码4位 |
数符1位 |
尾数10位 |
将十进制数转换为二进制:x1= 51/128= 0.0110011B= 2-1 * 0.110 011B
x2= -27/1024= -0.0000011011B = 2-5*(-0.11011B)
x3=7.375=111.011B=23*0.111011B
x4=-86.5=-1010110.1B=27*(-0.10101101B)
则以上各数的浮点规格化数为:
(1)[x1]浮=1,0001;0.110 011 000 0
[x2]浮=1,0101;1.110 110 000 0
[x3]浮=0,0011;0.111 011 000 0
[x4]浮=0,0111;1.101 011 010 0
(2)[x1]浮=1,1111;0.110 011 000 0
[x2]浮=1,1011;1.001 010 000 0
[x3]浮=0,0011;0.111 011 000 0
[x4]浮=0,0111;1.010 100 110 0
(3)[x1]浮=0,1111;0.110 011 000 0
[x2]浮=0,1011;1.001 010 000 0
[x3]浮=1,0011;0.111 011 000 0
[x4]浮=1,0111;1.010 100 110 0
13. 浮点数格式同上题,当阶码基值分别取2和16时:
(1)说明2和16在浮点数中如何表示。
(2)基值不同对浮点数什么有影响?
(3)当阶码和尾数均用补码表示,且尾数采用规格化形式,给出两种情况下所能表示的最大正数和非零最小正数真值。
解:(1)阶码基值不论取何值,在浮点数中均为隐含表示,即:2和16不出现在浮点格式中,仅为人为的约定。
(2)当基值不同时,对数的表示范围和精度都有影响。即:在浮点格式不变的情况下,基越大,可表示的浮点数范围越大,但浮点数精度越低。
(3)r=2时,
最大正数的浮点格式为:0,1111;0.111 111 111 1
其真值为:N+max=215×(1-2-10)
非零最小规格化正数浮点格式为:1,0000;0.100 000 000 0
其真值为:N+min=2-16×2-1=2-17
r=16时,
最大正数的浮点格式为:0,1111;0.1111 1111 11
其真值为:N+max=1615×(1-2-10)
非零最小规格化正数浮点格式为:1,0000;0.0001 0000 00
其真值为:N+min=16-16×16-1=16-17
14. 设浮点数字长为32位,欲表示±6万间的十进制数,在保证数的最大精度条件下,除阶符、数符各取1位外,阶码和尾数各取几位?按这样分配,该浮点数溢出的条件是什么?
解:若要保证数的最大精度,应取阶码的基值=2。
若要表示±6万间的十进制数,由于32768(215)< 6万 <65536(216),则:阶码除阶符外还应取5位(向上取2的幂)。
故:尾数位数=32-1-1-5=25位
25(32) 该浮点数格式如下:
阶符(1位) |
阶码(5位) |
数符(1位) |
尾数(25位) |
按此格式,该浮点数上溢的条件为:阶码³25
15. 什么是机器零?若要求全0表示机器零,浮点数的阶码和尾数应采取什么机器数形式?
解:机器零指机器数所表示的零的形式,它与真值零的区别是:机器零在数轴上表示为“0”点及其附近的一段区域,即在计算机中小到机器数的精度达不到的数均视为“机器零”,而真零对应数轴上的一点(0点)。若要求用“全0”表示浮点机器零,则浮点数的阶码应用移码、尾数用补码表示(此时阶码为最小阶、尾数为零,而移码的最小码值正好为“0”,补码的零的形式也为“0”,拼起来正好为一串0的形式)。
16.设机器数字长为16位,写出下列各种情况下它能表示的数的范围。设机器数采用一位符号位,答案均用十进制表示。
(1)无符号数;
(2)原码表示的定点小数。
(3)补码表示的定点小数。
(4)补码表示的定点整数。
(5)原码表示的定点整数。
(6)浮点数的格式为:阶码6位(含1位阶符),尾数10位(含1位数符)。分别写出其正数和负数的表示范围。
(7)浮点数格式同(6),机器数采用补码规格化形式,分别写出其对应的正数和负数的真值范围。
解:(1)无符号整数:0 ~ 216 - 1,即:0~ 65535;
无符号小数:0 ~ 1 - 2-16 ,即:0 ~ 0.99998;
(2)原码定点小数:-1 + 2-15~1 - 2-15 ,即:-0.99997~0.99997
(3)补码定点小数:- 1~1 - 2-15 ,即:-1~0.99997
(4)补码定点整数:-215~215 - 1 ,即:-32768~32767
(5)原码定点整数:-215 + 1~215 - 1,即:-32767~32767
(6)据题意画出该浮点数格式,当阶码和尾数均采用原码,非规格化数表示时:
最大负数= 1,11 111;1.000 000 001 ,即 -2-9´2-31
最小负数= 0,11 111;1.111 111 111,即 -(1-2-9)´231
则负数表示范围为:-(1-2-9)´231 —— -2-9´2-31
最大正数= 0,11 111;0.111 111 111,即 (1-2-9)´231
最小正数= 1,11 111;0.000 000 001,即 2-9´2-31
则正数表示范围为:2-9´2-31 ——(1-2-9)´231
(7)当机器数采用补码规格化形式时,若不考虑隐藏位,则
最大负数=1,00 000;1.011 111 111,即 -2-1´2-32
最小负数=0,11 111;1.000 000 000,即 -1´231
则负数表示范围为:-1´231 —— -2-1´2-32
最大正数=0,11 111;0.111 111 111,即 (1-2-9)´231
最小正数=1,00 000;0.100 000 000,即 2-1´2-32
则正数表示范围为:2-1´2-32 ——(1-2-9)´231
17. 设机器数字长为8位(包括一位符号位),对下列各机器数进行算术左移一位、两位,算术右移一位、两位,讨论结果是否正确。
[x1]原=0.001 1010;[y1]补=0.101 0100;[z1]反=1.010 1111;
[x2]原=1.110 1000;[y2]补=1.110 1000;[z2]反=1.110 1000;
[x3]原=1.001 1001;[y3]补=1.001 1001;[z3]反=1.001 1001。
解:算术左移一位:
[x1]原=0.011 0100;正确
[x2]原=1.101 0000;溢出(丢1)出错
[x3]原=1.011 0010;正确
[y1]补=0.010 1000;溢出(丢1)出错
[y2]补=1.101 0000;正确
[y3]补=1.011 0010;溢出(丢0)出错
[z1]反=1.101 1111;溢出(丢0)出错
[z2]反=1.101 0001;正确
[z3]反=1.011 0011;溢出(丢0)出错
算术左移两位:
[x1]原=0.110 1000;正确
[x2]原=1.010 0000;溢出(丢11)出错
[x3]原=1.110 0100;正确
[y1]补=0.101 0000;溢出(丢10)出错
[y2]补=1.010 0000;正确
[y3]补=1.110 0100;溢出(丢00)出错
[z1]反=1.011 1111;溢出(丢01)出错
[z2]反=1.010 0011;正确
[z3]反=1.110 0111;溢出(丢00)出错
算术右移一位:
[x1]原=0.000 1101;正确
[x2]原=1.011 0100;正确
[x3]原=1.000 1100(1);丢1,产生误差
[y1]补=0.010 1010;正确
[y2]补=1.111 0100;正确
[y3]补=1.100 1100(1);丢1,产生误差
[z1]反=1.101 0111;正确
[z2]反=1.111 0100(0);丢0,产生误差
[z3]反=1.100 1100;正确
算术右移两位:
[x1]原=0.000 0110(10);产生误差
[x2]原=1.001 1010;正确
[x3]原=1.000 0110(01);产生误差
[y1]补=0.001 0101;正确
[y2]补=1.111 1010;正确
[y3]补=1.110 0110(01);产生误差
[z1]反=1.110 1011;正确
[z2]反=1.111 1010(00);产生误差
[z3]反=1.110 0110(01);产生误差
18. 试比较逻辑移位和算术移位。
解:逻辑移位和算术移位的区别:
逻辑移位是对逻辑数或无符号数进行的移位,其特点是不论左移还是右移,空出位均补0,移位时不考虑符号位。
算术移位是对带符号数进行的移位操作,其关键规则是移位时符号位保持不变,空出位的补入值与数的正负、移位方向、采用的码制等有关。补码或反码右移时具有符号延伸特性。左移时可能产生溢出错误,右移时可能丢失精度。
19. 设机器数字长为8位(含1位符号位),用补码运算规则计算下列各题。
(1)A=9/64, B=-13/32,求A+B。
(2)A=19/32,B=-17/128,求A-B。
(3)A=-3/16,B=9/32,求A+B。
(4)A=-87,B=53,求A-B。
(5)A=115,B=-24,求A+B。
解:(1)A=9/64= 0.001 0010B, B= -13/32= -0.011 0100B
[A+B]补= 0.0010010 + 1.1001100 = 1.1011110 ——无溢出
A+B= -0.010 0010B = -17/64
(2)A=19/32= 0.100 1100B, B= -17/128= -0.001 0001B
[A-B]补= 0.1001100 + 0.0010001= 0.1011101 ——无溢出
A-B= 0.101 1101B = 93/128B
(3)A= -3/16= -0.001 1000B, B=9/32= 0.010 0100B
[A+B]补= 1.1101000 + 0.0100100 = 0.0001100 —— 无溢出
A+B= 0.000 1100B = 3/32
(4) A= -87= -101 0111B, B=53=110 101B
[A-B]补= 1 0101001 + 1 1001011 = 0 1110100 —— 溢出
(5)A=115= 111 0011B, B= -24= -11 000B
[A+B]补= 0 1110011 + 1 1101000 = 0 1011011——无溢出
A+B= 101 1011B = 91
20. 用原码一位乘、两位乘和补码一位乘(Booth算法)、两位乘计算x·y。
(1)x= 0.110 111,y= -0.101 110;
(2)x= -0.010 111,y= -0.010 101;
(3)x= 19,y= 35;
(4)x= 0.110 11,y= -0.111 01。
解:先将数据转换成所需的机器数,然后计算,最后结果转换成真值。
(1)[x]原=0.110111,[y]原=1.101110,x*=0.110111, y*=0.101110
原码一位乘:
部分积 |
乘数y* |
说明 |
0.000 000 +0.000 000 |
101 110 |
部分积初值为0,乘数为0加0 |
0.000 000 0.000 000 +0.110 111 |
010 111 |
右移一位 乘数为1,加上x* |
0.110 111 0.011 011 +0.110 111 |
101 011 |
右移一位 乘数为1,加上x* |
1.010 010 0.101 001 +0.110 111 |
010 101 |
右移一位 乘数为1,加上x* |
1.100 000 0.110 000 +0.000 000 |
001 010 |
右移一位 乘数为0,加上0 |
0.110 000 0.011 000 +0.110 111 |
000 101 |
右移一位 乘数为1,加上x* |
1.001 111 0.100 111 |
100 010 |
右移一位 |
即x*×y*=0.100 111 100 010,z0=x0Å y0=0 Å1=1,
[x×y]原=1.100 111 100 010,x·y= -0. 100 111 100 010
原码两位乘:[-x*]补=1.001 001,2x*=1.101 110
部分积 |
乘数y* |
Cj |
说明 |
000 . 000 000 +001 . 101 110 |
00 101 110 |
0 |
部分积初值为0,Cj=0 根据yn-1ynCj=100,加2x*,保持Cj=0 |
001 . 101 110 |
|
0 |
|
000 . 011 011 +111 . 001 001 |
10 001 011 10 001 011 |
0 |
右移2位 根据yn-1ynCj=110,加[-x*]补,置Cj=1 |
111 . 100 100 111 . 111 001 +111 . 001 001 |
00 100 010 |
1 |
右移2位 根据yn-1ynCj=101,加[-x*]补,置Cj=1 |
111 . 000 010 111 . 110 000 +000 . 110 111 |
10 001 000 |
1 |
右移2位 根据yn-1ynCj=001,加x*,保持Cj=0 |
000 . 100 111 |
10 001 0 |
|
|
即x*×y*=0.100 111 100 010,z0=x0Å y0=0 Å1=1,
[x×y]原=1.100 111 100 010,x·y= -0. 100 111 100 010
补码一位乘:[x]补=0.110111,[-x]补=1.001001,[y]补=1.010010
部分积 |
乘数 |
Yn+1 |
说明 |
00 . 000 000 00 . 000 000 +11 . 001 001 |
1 010 010 0 101 001 |
0 0 |
Ynyn+1=00,部分积右移1位 Ynyn+1=10,部分积加[-x]补 |
11 . 001 001 |
|
|
右移1位 |
11 . 100 100 +00 . 110 111 |
1 010 100 |
1 |
Ynyn+1=01,部分积加[x]补 |
00 . 011 011 |
|
|
右移1位 |
00 . 001 101 00 . 000 110 +11 . 001 001 |
1 101 010 1 110 101 |
0 0 |
Ynyn+1=00,部分积右移1位 Ynyn+1=10,部分积加[-x]补 |
11 . 001 111 |
|
|
右移1位 |
11 . 100 111 +00 . 110 111 |
1 111 010 |
1 |
Ynyn+1=01,部分积加[x]补 |
00 . 011 110 00 . 001 111 +11 . 001 001 |
0 111 101 |
0 |
右移1位 Ynyn+1=10,部分积加[-x]补 |
11 . 011 000 |
0 111 10 |
|
即 [x×y]补=1.011 000 011 110,x·y= –0.100 111 100 010
26.按机器补码浮点运算步骤,计算[x±y]补.
(1)x=2-011× 0.101 100,y=2-010×(-0.011 100);
(2)x=2-011×(-0.100 010),y=2-010×(-0.011 111);
(3)x=2101×(-0.100 101),y=2100×(-0.001 111)。
解:先将x、y转换成机器数形式:
(1)x=2-011× 0.101 100,y=2-010×(-0.011 100)
[x]补=1,101;0.101 100, [y]补=1,110;1.100 100
[Ex]补=1,101, [y]补=1,110, [Mx]补=0.101 100, [My]补=1.100 100
1)对阶:
[DE]补=[Ex]补+[-Ey]补 = 11,101+ 00,010=11,111 < 0,
应Ex向Ey对齐,则:[Ex]补+1=11,101+00,001=11,110 = [Ey]补
[x]补=1,110;0.010 110
2)尾数运算:
[Mx]补+[-My]补=0.010 110 + 00.011100= 00.110 010
3)结果规格化:
4)舍入:无
5)溢出:无
则:x+y=2-101×(-0.110 000)
(2)x=2-011×(-0.100010),y=2-010×(-0.011111)
1)对阶:过程同(1)的1),则
[x]补=1,110;1.101 111
2)尾数运算:
3)结果规格化:
[x+y]补=11,110;11.010 000,已是规格化数
[x-y]补=11,110;00.001 110 =11,100;00.111000 (尾数左规2次,阶码减2)
4)舍入:无
5)溢出:无
则:x+y=2-010×(-0.110 000)
(3)x=2101×(-0.100 101),y=2100×(-0.001 111)
1)对阶:
[DE]补=00,101+11,100=00,001 >0,应Ey向Ex对齐,则:
[Ey]补+1=00,100+00,001=00,101=[Ex]补
[y]补=0,101;1.111 000(1)
2)尾数运算:
3)结果规格化:
4)舍入:
[x+y]补=00,101;11.010 011(舍)
[x-y]补 不变
5)溢出:无
则:x+y=2101×(-0.101 101)
x-y =2100×(-0.111 011)