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”的八位二进制整数原码,可表示的最大数为________________。(用十六进制表示)