6.4 设机器数字长为8位(含1位符号位在内),写出对应下列各真值的原码、补码和反码。
-13/64,29/128,100,-87
解:十进制数 二进制数 原 码 反 码 补 码
-13/64 -0.00 1101 1.001 1010 1.110 0101 1.110 0110
29/128 0.001 1101 0.001 1101 0.001 1101 0.001 1101
100 110 0100 0,110 0100 0,110 0100 0,110 0100
-87 -101 0111 1,101 0111 1,010 1000 1,010 1001
6.5 已知[x]补,求[x]原和x.
[x]补 = 1.1100; [x]补 = 1.1001; [x]补 = 0.1110; [x]补 = 1.0000;
[x]补 = 1,0101; [x]补 = 1,1100; [x]补 = 0,0111; [x]补 = 1,0000;
解:[x]补 [x]原 x
1.1100 1.0100 -0.0100
1.1001 1.0111 -0.0111
0.1110 0.1110 0.1110
1.0000 1.0000 0
1,0101 1,1011 -1011
1,1100 1,0100 -0100
0,0111 0,0111 111
1,0000 1,0000 0
6.9 当十六进制数9B和FF分别表示为原码、补码、反码、移码和无符号数时,所对应的十进制数各为多少(设机器数采用一位符号位)
解: 原码 补码 反码 移码 无符号数
9B 二进制 -11011 -1100101 -1100100 +11011 1001
十进制 -27 -101 -100 +27 155
FF 二进制 -1111111 -0000001 -0000000 +1111111 1111 1111
十进制 -127 -1 -0 +127 255
6.11 已知机器数字长为4位(其中1位为符号位),写出整数定点机和小数定点机中原码、补码和反码的全部形式,并注明其对应的十进制数真值。
解:
真值
(二进制)
真值
(十进制)
原码
反码
补码
整
数
+111
+110
+101
+100
+011
+010
+001
+000
-1000
-111
-110
-101
-100
-011
-010
-001
-000
+7
+6
+5
+4
+3
+2
+1
+0
-8
-7
-6
-5
-4
-3
-2
-1
-0
0,111
0,110
0,101
0,100
0,011
0,010
0,001
0,000
无
1,111
1,110
1,101
1,100
1,011
1,010
1,001
1,000
同
原
码
无
1,000
1,001
1,010
1,011
1,100
1,101
1,110
1,111
同
原
码
1,000
1,001
1,010
1,011
1,100
1,101
1,110
1,111
0,000
小
数
+0.111
+0.110
+0.101
+0.100
+0.011
+0.010
+0.001
+0,000
+7/8
+3/4
+5/8
+1/2
+3/8
+1/4
+1/8
+0
0.111
0.110
0.101
0.100
0.011
0,.010
0.001
0.000
同
原
码
同
原
码
6.12 设浮点数格式为:阶符1位、阶码4位、数符1位、尾数10位,写出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)
则以上各数的浮点规格化数为:
(1)[x1]浮=1,0001;0.110 011 000 0
[x2]浮=1,0101;1.110 110 000 0
(2)[x1]浮=1,1111;0.110 011 000 0
[x2]浮=1,1011;1.001 010 000 0
(3)[x1]浮=0,1111;0.110 011 000 0
[x2]浮=0,1011;1.001 010 000 0
6.15 什么是机器零?若要求全0表示机器零,浮点数的阶码和尾数应采用什么机器数形式?
解:机器零是指机器数所表示的零的形式,它与真值零的区别是:机器零在数轴上表示为“0”点及其附近的一段区域,即在计算机中小到机器数的精度达不到的数均视为“机器零”,而真零对应数轴上的一点(0点)。
6.16 设机器数字长为16位,写出下列各种情况下它所能表示的数的范围。设机器数采用一位符号位,
均用十进制数表示。
(1) 无符号数
(2) 原码表示的定点小数
(3) 补码表示的定点小数
(4) 补码表示的定点整数
(5) 原码表示的定点整数
(6) 浮点数的格式为:阶符1位、阶码5位、数符1位、尾数9位(共16位)。分别写出其正数和负数的表示范围
(7) 浮点数格式同(6),机器数采用补码规格化形式,分别写出 其对应的正数和负数的真值范围。
解:(1) 无符号数:0 —— 2^16 – 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) 补码定点整数:-2^15 —— 2^15 – 1,即-32768 —— 32767
(5) 原码定点整数:-2^15 + 1 —— 2^15 – 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) * 2^31
则负数表示范围为:-(1 – 2^-9) * 2^31 —— -2^-9 * 2^-31
最大正数 = 0,11 111: 0.111 111 111;即-(1 – 2^-9) * 2^31
最小正数 = 1,11 111; 0.000 000 001,即2^-9 * 2^-31
则正数表示范围为:2^-9 * 2^-31 —— (1 – 2^-9) * 2^31
(7) 当机器数采用补码规格化形式时,若不考虑隐藏位,则
最大负数 = 1,00 000; 1.011 111 111,即-2^-1 * 2^-32
最小负数 = 0,11 111; 1.000 000 000,即-1 * 2^31
则负数表示范围为:-1 * 2^31 —— -2^-1 * 2^-32
最大正数 = 0,11 111; 0.111 111 111,即(1 – 2^-9) * 2^31
最小正数 = 1,00 000; 0.100 000 000,即2^-1 * 2^-32
则正数表示范围为:2^-1 * 2^-32 —— (1 – 2^-9) * 2^31
6.17 设机器数字长为8位(包括一位符号位),对下列各机器数进行算术左移1位、2位,
算术右移1位、2位,结果是否正确。
[x1]原 = 0.0011010; [y1]补 = 0.1010100; [z1]反 = 1.0101111
[x2]原 = 1.1101000; [y2]补 = 1.1101000; [z2]反 = 1.1101000
[x3]原 = 1.0011001; [y3]补 = 1.0011001; [z3]反 = 1.0011001
解:算术左移1位
[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.10 1 1111;溢出(丢0)出错
[z2]反 = 1.101 0001;正确
[z3]反 = 1.011 0011;溢出(丢0)出错
算术左移2位:
[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)出错
算术右移1位:
[x1]原 = 0.000 1101;正确
[x2]原 = 1.011 0100;正确
[x3]原 = 1.000 1100;丢1,产生误差
[y1]补 = 0.010 1010;正确
[y2]补 = 1.111 0100;正确
[y3]补 = 1.100 1100;丢1,产生误差
[z1]反 = 1.101 0111;正确
[z2]反 = 1.111 0100;丢0,产生误差
[z3]反 = 1.100 1100;正确
算术右移2位:
[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,产生误差