课课通计算机原理
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.3 原码、反码、补码

学习目标

1.了解数的定点法和浮点法表示。

2.掌握原码、反码、补码的概念。

3.掌握补码运算的规则。

内容提要

1.定点数和浮点数

计算机中处理的数值型数据,按小数点的处理方法可分为定点数、浮点数。相应的表示方法称为定点法和浮点法。

1)定点数

定点数是指小数点的位置固定不变的数,又称为用定点法表示的数。定点数分为以下两种。

(1)定点整数 规定小数点在最低数值位之后,机器中所能表示的所有数值都是整数。n位二进制所能表示的定点整数的范围是-2n?1~2n?1

(2)定点小数 规定小数点在最高数值位和符号位之间,机器中所能表示的所有数值都是小数。n位二进制所能表示的定点小数的范围是?(1-2n?1)~(1-2n?1)。

注意 定点数中小数点的位置是隐含的,不需要写出。定点法表示的缺点是只能表示纯整数或纯小数。

2)浮点数

浮点数是指小数点的位置不是固定的,是可变化的。一般来说,任何一个二进制数N可以表示为:N=2P×S。其中,P为阶码、S为尾数。P或S均有正负,P的正负称为阶码的符号,简称为阶符,S的正负就是N的正负,称为数符;P或S均有大小,即阶码数值、尾数数值。

在字长为M位的计算机中,浮点数如表1-3-1所示。

表1-3-1 浮点数

注意

(1)阶码用定点整数的补码表示,尾数用定点小数的补码表示。

(2)对于某计算机来说,字长M是固定的,那么,L位的多少决定了浮点数的表示范围, (M-2-L)位的多少决定了浮点数的精度;L位数越多可表示的浮点数的范围大,而精度越低,反之则相反。

(3)规格化浮点数要求尾数满足:0.5≤S<1。判断计算机内部一个浮点数是规格化的依据:尾数的最高数值位与符号位相反。

3)定点数与浮点数的比较

(1)在字长 M 相同的情况下,浮点数表示的范围比定点数大,但精度低;定点数表示的范围比浮点数表示的范围小,但精度高。

(2)浮点数运算规则比定点数复杂,对计算机硬件的要求高,需要的设备多。

(3)在微型计算机内部一般采用定点法表示。

2.原码、反码、补码

1)真值与机器数

(1)真值 真值是带有“+”、“-”号的数,真值可以是各种进制。如+10、+1010B、-1101B、-13Q、-DH。

(2)机器数 机器数是将符号数字化后的二进制数,机器数的最高位为符号位,其他各位为数值位。符号位是0表示正数,1表示负数。机器数分为原码、反码与补码。如真值+1010B、-1101B对应的01010B、11101B为机器数。

2)原码、反码、补码

(1)原码 符号位为0表示正数,符号位为1表示负数。真值中符号位数字化后得到的机器数就是原码。

(2)反码 正数的反码与原码相同。负数的反码是在原码基础上,符号位不变,数值位在原码基础上全部按位取反。

(3)补码 正数的补码与反码相同。负数的补码是在反码基础上,符号位不变,数值位在反码基础上+1。

例如,假设字长为8位,写出58、127和-127的原码、反码和补码。

3.补码运算的规则

计算机中的算术运算一般采用补码进行运算,补码的符号位可直接参加运算,运算结果仍为补码。运算规则主要如下。

1)两数之和/差的补码

两数之和差的补码如下所示:

[X+Y]=[X]+[Y]

[X-Y]=[X]+[-Y]

2)求补

求补就是求相反数的补码。已知[X],求[-X]的方法:将[X]连同符号位全部取反,然后+1就得到[-X]。如已知-127的补码是10000001,求127的补码是多少?

令X=-127,则[X]=10000001,所以[-X]=01111110+1=01111111。

3)溢出

溢出就是计算机运算的结果超出了计算机所能表示的范围。溢出分为上溢和下溢,上溢是指运算结果超出了所能表示的最大数,下溢是指超出所能表示的最小数。

溢出的判断方法主要有两种。方法一:用定义进行判断。方法二:用双符号位进行判断,CS+1和CS分别为进位标志位的最高位与次高位。当CS+1CS相异表示溢出,01为上溢, 10为下溢;当CS+1CS相同,即00或11表示没有溢出。

例题解析

【例1-3-1】(江苏省单招考题2008年) 下列数中最小的数是( )。

A.[10010101]

B.[10010101]

C.[10010101]

D.[10010101]2

本题考查的知识点是原码、反码和补码,比较大小。答案A对应的真值是?21D,答案B对应的真值是?106D,答案C对应的真值是?107D。答案D从形式上看,[10010101]2可能是有符号数,也可能是无符号数,如果是有符号数则其真值是?21D,如果是无符号数则真值是149D。

答案 C

拓展与变换 当备选答案中有正数也有负数时,若找出最小数时,可以先排除正数;反之,找出最大数时可以先排除负数。与本题类似的题目:下列数中最大的数是( );下列数中真值与其他数不相等的是( )。

【例1-3-2】(江苏省单招考题2010年) 十进制数?48用补码表示为( )。

A.10110000

B.11010000

C.11110000

D.11001111

分析 本题考查的知识点是真值转换为补码。令X=?48,则

[X]=?48D=?0110000B

[X]=1011000

[X]=11001111

[X]=11010000

答案 B

拓展与变换 十进制数?48对应的机器数是10110000,则为( )。

A.原码

B.反码

C.补码

D.8421BCD码

【例1-3-3】 无符号二进制数后加上一个0,形成的数是原来的( )倍。

A.1

B.2

C.10

D.不确定

分析 在无符号二进制数后加上一个 0,相当于左移一位,形成的数是原来的 2 倍。如X=1110B,在后面加上一个0时Y=11100B。

答案 B

拓展与变换 在十进制数、八进制数、十六进制数后加上一个0,形成的数是原来的多少倍?二进制、十进制数、八进制数或十六进制数最后一位是0,将这个0删除,形成的数是原来的多少倍?

【例 1-3-4】 若浮点数的阶码采用 3 位补码表示,尾数采用 5 位补码表示,则浮点数10110011的阶码、尾数对应的二进制分别是( )。

A.-1、-5

B.-3、-0.8125

C.-2、1.1875

D.5、38

分析 本题是考查浮点数表示法:阶码采用定点整数表示,尾数采用定点小数表示。本题中阶码是最左边3位:101,尾数是右边5位:100111。阶码101是定点整数的补码,真值是?3D;尾数10011是定点小数,小数点隐含在数符1的后面,相当于1.0011,则真值是?0.8125D。

答案 B

【例1-3-5】( )字长为16位的补码,其所能表示的定点小数最小值为-1。

分析 定点小数的最小值的补码形式为 1.00…0(小数点是隐含的,可以不写出)。无论字长多长,其值的大小都是?1。

答案

【例1-3-6】( ) 江苏省单招考题2009年)在计算机内部为简化电路设计,一般采用补码形式进行数值运算。

分析 计算机中对二进制位取反、+1、移位等运算比较容易实现,补码运算时加法、减法都是通过加法实现的,乘法、除法运算是通过移位实现的,补码的符号位可直接参加运算,运算结果仍为补码。补码运算相比原码运算、反码运算来说,对硬件要求低,可以简化电路设计,容易实现。因此,计算机内部运算一般采用补码进行运算,

答案

【例1-3-7】( )负数的原码的补码的补码是原码本身。

分析 本题考查的是补码的一个重要特点:负数由原码换算为补码时,符号位不变,数值位“按位取反后再+1”;而负数由补码换算为原码时,同样是符号位不变,数值位“按位取反后再+1”。也就是说,负数的原码与补码互为逆运算,其算法完全相同。这样实现互为逆运算使用同一电路,简化了计算机的硬件设计。

答案

【例1-3-8】(江苏省单招考题2013年)已知X和Y均为8位定点整数,且X的真值是-157D,Y的真值为+72H,则[X+Y]= B。

分析 令X=?157D,Y=+72H=114D,补码表示8位定点整数的范围是-128~127,则[X]=溢出,[Y]=01110010。

答案 溢出

【例1-3-9】 (江苏省单招考题2009年) 已知[X]=01110111B,[Y]=01100010B,则[X-Y]=________________。

分析 本题考查重点是补码运算。根据[Y]=01100010,可得[?Y]=10011110,则

CS+1CS=11,没有溢出;[1]丢失

答案 00010101B

【例1-3-10】已知-1的补码是11111111,-127的补码是10000001,则-128的补码是______。

分析 本题考查的重点是补码运算。根据:[-128]= [-1+(-127)]=[-1]+[-127],而[-1]=11111111,[-127]=10000001,则

CS+1CS=11,没有溢出;将[1]丢失。得到[?128]=10000000。

答案 10000000

【例1-3-11】7A7685BH的16倍是______H。

分析 本题的重点是考查对数制的理解。二进制数左移1位后所得的数是原来的2倍,同样,八进制数左移1位后所得的数是原来的8倍,而十六进制数左移1位后所得的数是原来的16倍。

答案 7A7685B0

拓展与变换 7A7685BH除以16倍,其余数是______B。

巩固练习

一、单项选择题

1.(江苏省单招考题2012年)8位补码表示的定点整数范围是( )。

A.-128~+128

B.-128~+127

C.-127~+128

D.-127~+127

2. 下列四个无符号十进制数中,能用八位二进制数表示的是( )。

A.296

B.333

C.256

D.199

3. 定点数作补码加减运算时,其符号位是( )。

A.与数位分开进行运算

B.与数位一起参与运算

C.符号位单独作加减运算

D.两数符号位作异或运算

4. 对于二进制码10000000,若其值为?128,则它的表示是用( )。

A.原码

B.反码

C.补码

D.阶码

5. 已知两数 X=-1101001B,Y=-1011011B,用补码进行加法运算后结果是下列情况( )。

A.有进位

B.有溢出

C.无溢出

D.以上都不对

6. 在机器数中,零的表示形式是唯一的是( )。

A.原码

B.补码

C.反码

D.反码和原码

7. 已知[X]=11101011,[Y]=01001010,[X-Y]=( )。

A.10100001

B.11011111

C.10100000

D.溢出

二、判断题

8.( )(江苏省单招考题2013年)设X是字长为n的定点整数,则X的模为2n?1

9.( )(江苏省单招考题 2011 年)在计算机字长范围内,正数的原码、反码和补码相同。

10.( )计算机内部只能使用二进制、八进制或十六进制。

11.( )十进制数-113的8位二进制补码是10001110。

12.( )不论正数还是负数,原码补码的补码还是原码。

三、填空题

13.如果字长为8位,则+1、-1、+0和-0四个数的补码依次是______、 ______、______ 和______。

14.(江苏省单招考题2011年) 已知X、Y为两个带符号的定点整数,它们的补码为[X]=00010011B,[Y]=11111001B,则[X+Y] =______B。

15.(江苏省单招考题2010年B)已知[X]=11111111,X对应的真值是________ 。

16.(江苏省单招考题2012年)已知[X]=10000000,则X=________B。

17.已知[X]=010011B,则[-2X] =_________B。

18.用两个字节表示一个非负整数,则可以表示的数的范围,最小的一个是0,最大的一个是________________ H。

19.码值80H:若表示真值0,则为________________;若表示-128,则为________________码。

20.十进制数-75用二进制数10110101表示,其表示方式是________________。

21.8 位二进制补码 00011001 的十进制数是________________,而 8 位二进制补码 10011001的十进制数是________________。

22.一个含有6个“1”、2个“0”的八位二进制整数原码,可表示的最大数为________________。(用十六进制表示)