《计算机组成原理》课程习题答案 - 秦磊华2011-9-8 下载本文

《计算机组成原理》习题答案 (秦磊华)

第二章 数据表示方法 习 题 二

2.1解释下列名词

真值:正号和负号分别用“+”和“-”表示,数据位保持二进制值不变的数据表示方法。 数值数据:计算机所支持的一种数据类型,用于科学计算,常见的数值数据类型包括小数、整数、浮点数数等。 非数值数据:计算机所支持的一种数据类型,一般用来表示符号或文字等没有数值值的数据。 机器数:数据在机器中的表示形式,是正负符号数码化后的二进制数据。

变形补码:用两个二进制位来表示数字的符号位,其余与补码相同。即“00”表示正,“11”表示负。

规格化:将非规格化的数处理成规格化数的过程。规格化数规定尾数用纯小数表示,且真值表示时小数点后第一位不为0(以机器数表示时对小数点后第一位的规定与具体的机器数的形式有关)。

机器零:计算机保存数字的位有限,所能表示最小的数也有范围,其中有一个范围之中的数据无法精确表示,当实际的数据处在这个无法精确表示的数据范围时计算机就将该数作为机器零来处理,因此,计算机中的机器零其实对应的不是一个固定的数,而是一个数据表示范围。

BCD码:用4位二进制数来表示1位十进制数中的0~9这10个数码,即二进制表示的十进制数。

汉字内码:计算机内部存储、处理加工和传输汉字时所用的由0和1符号组成的代码。 码距:一组编码中对应位上数字位不同的最小个数。

奇偶校验:通过检测校验码中1的个数的奇/偶性是否改变来判断数据是否出错的一种数据校验方法。 海明校验:是一种基于多重奇校验且具有检测与纠正错误的校验方法。其基本原理是将有效信息按某种规律分成若干组,每组安排一个校验位进行奇偶测试,就能提供多位检错信息,以指出最大可能是哪位出错,从而将其纠正。 循环冗余校验:是数据通信领域中最常用的一种具有检测与纠正错误能力差错校验码,基利用生成多项式并基于模2运算建立编码规则。 检错:检测被传送的信息中是否发生差错。

纠错:纠正信息在传送或存储过程中所发生的错误。

2.2回答下列问题

1)为什么计算机中采用二进制?

答:因为二进制具有运算简单和表示简单的优点,除此之外还有可靠和容易实现等特点。

具体来说,是因为:

(1)技术实现简单,计算机是由逻辑电路组成,逻辑电话通常只有两个状态,开关

的接通与断开,这两种状态正好可以用“1”和“0”表示。

(2)简化运算规则:两个二进制数和、积运算组合各有三种,运算规则简单,有利

于简化计算机内部结构,提高运算速度。

(3)适合逻辑运算:逻辑代数是逻辑运算的理论依据,二进制只有两个数码,正好

与逻辑代数中的“真”和“假”相吻合。

(4)易于进行转换,二进制与十进制数易于互相转换。

2)为什么计算机中采用补码表示带符号的整数?

第 5 页 共 70 页

《计算机组成原理》习题答案 (秦磊华)

答:采用补码运算具有如下两个特征:

(1)因为使用补码可以将符号位和其他位统一处理,同时,减法也可以按加法来处理,即如果是补码表示的数,不管是加减法都直接用加法运算即可实现。

(2)两个用补码表示的数相加时,如果最高位(符号位)有进位,则进位被舍弃。 这样的运算有两个好处:

(a)使符号位能与有效值部分一起参加运算,从而简化运算规则。从而可以简化运算器的结构,提高运算速度;(减法运算可以用加法运算表示出来。)

(b)加法运算比减法运算更易于实现。使减法运算转换为加法运算,进一步简化计算机中运算器的线路设计。

3)浮点数的表示范围和精确度分别由什么决定?字长一定时浮点数的表示范围与精确度之间有和关系?

答:浮点数的表示范围由阶码的位数决定,精确度由尾数的位数决定。

当机器字长一定时,分给阶码的位数越多,尾数占用的位数就越少,则数的表示范围越大。而尾数占用的位数减少,必然会减少数的有效数位,即影响数的精度。

4)汉字输入码、机内码和字型码在汉字处理过程中各有何作用?

答:汉字输入码、机内码和字型码,分别用于汉字的输入、汉字在计算机内的处理以及汉字的显示和打印。

具体来说,计算机要对汉字信息进行处理,首先要将汉字转换成计算机可以识别的二进制形式并输入到计算机,这是由汉字输入码完成的;汉字输入到计算机后,还需要转换成内码才能被计算机处理,显然,汉字内码也应该是二进制形式。如果需要显示和打印汉字,还要将汉字的内码转换成字形码。

5)在机内码中如何区分两个ASCII码字符和一个汉字? 答:将一个汉字看成是两个扩展ASCII码,使表示GB2312汉字的两个字节的最高位都为1,而每个ASCII码字符中每个字节的最高位为0。这样就能区别一个机内码到底对应一个汉字还是两个西文字符。

6)“8421码就是二进制数”。这种说法对吗?为什么?

答:这种说法是不对的。8421码是一种最简单的有权码,它选取4位二进制数的前10个代码0000~1001分别对应表示十进制数的10个数码。若按权求和,和数就等于该代码所对应的十进制数。

8421码是一种编码方式,用于十进位制与二进制数之间的转换。

而二进制数是用0和1两个数码来表示的数。二者是不同的概念,不能等同。

7)如何识别浮点数的正负?浮点数能表示的数值范围和数值的精确度取决于什么?

答:当采用一般浮点数格式表示浮点数时,阶码和尾数都各包含一位符号位。浮点数的正负由尾数的的符号位决定。当采用IEEE754格式时,通过数符就能判断出浮点数的正负。

浮点数能表示的数值范围和数值的精确度,分别取决于阶码的位数和尾数的位数。

8)简述CRC的纠错原理。

答:发送部件将某信息的CRC码传送至接收部件,接收部件收到CRC码后,仍用约定的生成多项式G(x)去除,若余数为0,表示传送正确;若余数不为0,表示出错,再由余数的值来

第 6 页 共 70 页

《计算机组成原理》习题答案 (秦磊华)

确定哪一位出错,从而加以纠正。具体的纠错原理如下:

(1)不论错误出现在哪一位,均要通过将出错位循环左移到最左边的一位上时被纠正; (2)不为零余数的具有循环特性。即在余数后面补一个零除以生成多项目式,将得到下一个余数,继续在新余数基础上补零除以生成多项式,继续该操作,余数最后能循环到最开始的余数。

(3)CRC就是利用不为零余数的循环特性,在循环计算余数的同时,将收到的CRC编码同步移动,当余数循环到等于最左边位出错对应的余数时,表明已将出错的位移到CRC码的最左边,对出错位进行纠错。

(4)继续进行余数的循环计算,并同步移动CRC编码,当余数又回到最开始的值时,纠错后的CRC码又回到了最开始的位置。至此,完成CRC的纠错任务。

2.3 写出下列各数的原码、反码和补码。 0, 一0, 0.10101, 一0.10101, 0.11111, 一0.11111, -0.10000, 0.10000 解:

x=0,则[+0]原 = 0.00?0 , [+0 ]反= 0.00?0,[+0]补 =0.00?0; x=-0,则[-0]原 = 1.00?0,[-0]反 = 1.11?l,[-0]补 = 0.00?0; x=0.10101,则[x]原 =0.10101,[x]反 =0.10101,[x]补 =0.10101; x=一0.10101,则[x]原 =1.10101,[x]反 =1.01010,[x]补 =1.01011; x=0.11111,则[x]原 =0.11111,[x]反 =0.00000,[x]补 =0.00001; x=一0.11111,则[x]原 =1.11111,[x]反 =1.00000,[x]补 =1.00001; x=-0.10000,则[x]原 =1.10000,[x]反 =1.01111,[x]补 =1.10000; x=0.10000,则[x]原 =0.10000,[x]反 =0.10000,[x]补 =0.10000。

2.4 已知数的补码表示形式,求数的真值。

[x]补=0.10010, [x]补=1.10010, [x]补=1.11111, [x]补=1.00000, [x]补=0.10001, [x]补=1.00001,

解:

[x]补=0.10010,则[x]原=0.10010,x=0.10010; [x]补=1.10010,则[x]原=1.01101,x=-0.01101; [x]补=1.11111,则[x]原=1.00000,x=-0; [x]补=1.00000,则[x]原=1.11111,x=-0.11111; [x]补=0.10001,则[x]原=0.10001,x=0.10001; [x]补=1.00001,则[x]原=1.11110,x=-0.11110。

2.5 已知x=0.10110,y=—0.01010,求:

[x/2]补, [x/4]补, [y/2]补, [2y]补

解: [x]原=0.10110=[x]反=[x]补,

所以[x/2]补=0.010110,[x/4]补=0.0010110; [y]原=1.01010,[y]反=1.10101,[y]补=1.10110, 所以[y/2]补=1.110110,[2y]补=1.0110。

2.6 C语言中允许无符号数和有符号整数之间的转换, 下面是一段C语言代码: Int x =-1;

Unsigned u=2147483648;

第 7 页 共 70 页

《计算机组成原理》习题答案 (秦磊华)

Printf (“x=%u=%d\\n”,x,x); Printf (“u=%u=%d\\n”,u,u);

给出在32位计算机中上述程序段的输出结果并分析原因. 解:x=4294967295=-1;u=2147483648=-2147483648

原因:x是int型,在计算机中以补码形式存在。%u以无符号输出,%d输出真值,所以x=4294967295=-1。

u=231是一个无符号数,无溢出,由于首位为1

%u符号输出第一位为非符号位,所以是2147483648

%d 第一位为符号位,所以是负数,取反加1还是231所以是-2147483648。

2.7 分析下列几种情况下所能表示的数据范围分别是多少 1)16位无符号数;

2)16位原码定点小数; 3)16位补码定点小数; 4) 16位补码定点整数; 解:

1)16位无符号数:0 ~ 1111 1111 1111 1111,即0 ~ 216-1=65535

2)16位原码定点小数:1.111 1111 1111 1111 ~ 0.111 1111 1111 1111,即 -(1-2-15)~ 1-2-15 3)16位补码定点小数:1.000 0000 0000 0000 ~ 0.111 1111 1111 1111,即 -1 ~ 1-2-15 4) 16位补码定点整数:1000 0000 0000 0000 ~ 0111 1111 1111 1111,即 -215 ~ 215-1

2.8 用补码表示8位二进制整数,最高位用一位表示符号(即形如x0x1x2x3x4x5x6x7)时,模应为多少?

解:因为8位二进制数补码的表示范围为:-128~127一共有256个数,所以模为256。

2.9 用IEEE754 32位浮点数标准表示十进制数

a)?65 b)3.1415927 c)64000

8解:

a) 首先分别将整数和分数部分转换成二进制数:

5?6=-110.101 8移动小数点,使其变成1.M的形式: -110.101=-1.10101*22 于是得到:

S=0, e = 2,E= 10+01111111 = 10000001,M = 10101 最后得到32位浮点数的二进制存储格式为:

1100 0000 1101 0100 0000 0000 0000 0000=(C0D40000)16

b) 首先分别将整数和分数部分转换成二进制数: 3.1415927=11.00100100001111110110101 移动小数点,使其变成1.M的形式

11.00100100001111110110101=1.100100100001111110110101×2

第 8 页 共 70 页