-
1 教学内容
-
2 教学视频
本节教学内容:
1、机器数与真值、原码表示法
2、补码表示法和反码表示法
3、数的定点和浮点表示
教学目的和要求:
1、掌握机器数与真值、原码表示法;
2、掌握补码表示法和反码表示法;
3、掌握移码的表示法;
4、掌握数的定点和浮点表示。
重点:1、数的符号表示;
2、原码、反码、补码的转换及联系。
难点:1、数的定点和浮点表示。
第1讲机器数、真值、原码、补码和反码的表示法
一、知识要点
1、无符号数和有符号数
2、机器数与真值、原码表示法
3、补码表示法和反码表示法
4、移码表示法
二、教学安排
首先介绍无符号数和有符号数,然后依次介绍机器数、真值、原码、补码和反码的表示方法,并对表示的过程进行举例,但是过程这部分对于部分学生来说理解比较困难,所以,讲解的重点仍然是放在表示方法上。
三、教学内容
1、无符号数
计算机中的数均在寄存器中,通常称寄存器的位数为机器字长。所谓无符号数,即没有富豪的数,在寄存器中的每一位均可用来存放数值。当存放有符号数时,则需要留出位置存放符号。因此,在机器字长相同的时候,无符号数与有符号数所对应的数值范围是不同的。以机器字长为16位为例,无符号数的表示范围为0~65535 ,而有符号数的表示范围为-32768~+32767。
2、有符号数的机器数与真值
对有符号数而言,符号的“正”负机器是无法识别的,但由于“正”“负”恰好是两种截然不同的状态,如果用“0”表示“正”,用“1”表示负,这样符号也被数字化了,并且规定将它放在有效数字的前面,即组成了有符号数。
例如,有符号数(小数):

又如,有符号数(整数):

把符号“数字化”的数称为机器数,而把带“+”或“-”符号的数称为真值。一旦符号数字化后,把符号和数值就形成了一种新的编码。在运算过程中,符号位能否和数值部分一起参加运算?如果参加运算,符号位又需要作那些处理?这些编码就是原码,补码,反码和移码。
3、原码表示法
原码是机器数中最简单的一种表示形式,符号位为0表示正数,符号位为1表示负数,数值位即真值的绝对值,故原码表示又称为带符号的绝对值表示。上面举例的4个真值所对应的机器数为原码。为了书写方便以及区分整数和小数,约定整数的符号位与数值位之间用逗号隔开。小数的符号位与数值位之间用小数点隔开。例如,上面4各数的原码分别是0.1011、1.1011、0,1100和1,1100。由此可得原码的定义。
整数原码的定义为

式中,x为真值,n为整数的位数。
例如:
当x= +1110时,[x]原= 0 , 1110
当x=-1110[x]原= 24 + 1110 = 1 , 1110(用逗号将符号位和数值部分隔开)
小数原码定义为

式中,x为真值。
例如:
当x= + 0.1101时,[x]原= 0 . 1101
当x=-0.1101时,1-(-0.1101) = 1 . 1101
原码表示简单明了,并易于和真值转换。但用原码进行加减运算时,却带来了许多麻烦。例如,当两个操作数符号不同且要作加法运算时,先要判断两数绝对值大小,然后将绝对值大的数减去绝对值小的数,结果的符号以绝对值大的数为准。运算步骤既复杂又费时,而且本来是加法运算却要用减法器实现。那么能否在计算机中只设加法器,只作加法操作呢?如果能找到一个与负数等价的正数来代替该负数,就可把减法操作用加法代替。而机器数采用补码时,就能满足此要求。
4、补码表示法
在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统一处理;同时,加法和减法也可以统一处理。此外,补码与原码相互转换,其运算过程是相同的,不需要额外的硬件电路。
模的概念可以帮助理解补数和补码。
“模”是指一个计量系统的计数范围。如时钟等。计算机也可以看成一个计量机器,它也有一个计量范围,即都存在一个“模”。例如:
时钟的计量范围是0~11,模=12。表示n位的计算机计量范围是0~2^(n)-1,模=2^(n)。
“模”实质上是计量器产生“溢出”的量,它的值在计量器上表示不出来,计量器上只能表示出模的余数。任何有模的计量器,均可化减法为加法运算。
例如:假设当前时针指向10点,而准确时间是6点,调整时间可有以下两种拨法:一种是倒拨4小时,即:10-4=6;另一种是顺拨8小时:10+8=12+6=6
在以12模的系统中,加8和减4效果是一样的,因此凡是减4运算,都可以用加8来代替。对“模”而言,8和4互为补数。实际上以12模的系统中,11和1,10和2,9和3,7和5,6和6都有这个特性。共同的特点是两者相加等于模。
对于计算机,其概念和方法完全一样。n位计算机,设n=8,所能表示的最大数是11111111,若再加1成为100000000(9位),但因只有8位,最高位1自然丢失。又回了00000000,所以8位二进制系统的模为2^8。在这样的系统中减法问题也可以化成加法问题,只需把减数用相应的补数表示就可以了。把补数用到计算机对数的处理上,就是补码。
由此可得如下结论。
一个负数可用它的正补数来代替,而这个正补数可以用模加上负数本身求得。
一个整数和一个负数互为补数时,它们绝对值之和即为模数。
正数的补数即该正数本身。
补码的定义
整数补码的定义为

式中,x为真值,n为整数的位数。
例如:

小数补码的定义为

式中,x为真值。
例如

由于负数-x1x2x3x4的原码为1, x1x2x3x4,因此对这个负数求补,可以看做对它的原码除符号位外,每位求反,末位加1,简称“求反加1”.这样,由真值通过原码求补码就可避免减法运算。同理,对于小数也有同样的结论。
“由原码除符号位外,每位求反,末位加1求补码”这一规则同样适用于由
[x]补求[x]原。而对于一个负数,若对其原码除符号位外,每位求反(简称“每位求反”),或是对其补码减去末位的1,即得机器数的反码。
1)已知原码,求补码。
例:已知某数X的原码为10110100B,试求X的补码和反码。
解:由[X]原=10110100B知,X为负数。求其反码时,符号位不变,数值部分按位求反;求其补码时,再在其反码的末位加1。
1 0 1 1 0 1 0 0 原码
1 1 0 0 1 0 1 1 反码,符号位不变,数值位取反
+1
1 1 0 0 1 1 0 0 补码
故:[X]补=11001100B,[X]反=11001011B。
2)已知补码,求原码。
分析:按照求负数补码的逆过程,数值部分应是最低位减1,然后取反。但是对二进制数来说,先减1后取反和先取反后加1得到的结果是一样的,故仍可采用取反加1 有方法。
例:已知某数X的补码11101110B,试求其原码。
解:由[X]补=11101110B知,X为负数。
采用逆推法
1 1 1 0 1 1 1 0 补码
1 1 1 0 1 1 0 1 反码(末位减1)
1 0 0 1 0 0 1 0 原码(符号位不变,数值位取反)
5、反码表示法
反码通常用来作为由原码求补码或者由补码求原码的中间过渡。反码的定义如下:
整数反码的定义为

例如:

小数反码的定义为

例如:

实际上,反码也看做是mod(2-2-n)(对于小数)或mod(2n+1-1)(对于整数)的补码。与补码相比,仅在末位差1,因此有些书上称小数的补码为2的补码,而称小数的反码为1的补码。
综上所述,三种机器数的特点可归纳如下:
三种机器数的最高位均为符号位。符号位和数值部分之间可用“.”(对于小数)或“,”(对于整数)隔开。
当真值为正时,原码、补码和反码的表示形势均相同,即符号位用“0”表示,数值部分与真值相同。
当真值为负时,原码、补码和反码的表示形式不同,但符号位都用“1”表示,而数值部分有这样的关系,即补码是原码的“求反加1”,反码是原码的“每位求反”。
例:设机器数字长为8 位(其中1位为符号位)对于整数,当其分别代表无符号数、原码、补码和反码时,对应的真值范围各为多少?
四、互动及练习
本次课采用提问的互动方式:
1、机器码与真值和原码的关系?
请同学们先讨论谈自己的看法,然后通过例题讲解计算机如何将一个数的真值转换成它的机器数和原码。
2、为什么计算机中要以补码来存储数值。
请同学们先讨论谈自己的看法,然后以例题来引出反码、补码的表示方法及其作用。
第2讲数的定点和浮点表示
一、知识要点
1、移码表示法
2、定点表示
3、浮点表示
二、教学安排
首先,介绍移码的作用和表示方法,然后介绍什么是定点数和浮点数,浮点数的作用,以及定点数和浮点数的表示方法,浮点数的范围,浮点数的规格化形式等。定点数和浮点数是计算机中两种重要的表示方法,需通过例题让学生理解。
三、教学内容
1、移码表示法
当真值用补码表示时,由于符号位和数值部分一起编码,与习惯上的表示法不同,因此人们很难从补码的形式上直接判断其真值的大小。如果对每个真值加上一个2n(n为整数的位数),情况就发生了变化,从代码本身就可以看出真值的实际大小,这就是移码。
移码是一种专门用于浮点数阶码表示的码制,采用这种表示方法可以更方便地比较两数阶码的大小同一真值的补码与移码只差一个符号位,将补码的符号位变反即可得该真值的移码。移码(又叫增码)是符号位取反的补码。
①移码的定义:设由1位符号位和n位数值位组成的阶码,则[X]移=2En + X -2n≤X ≤2n
例如:X=+1011 [X]移=11011
X=-1011 [X]移=00101
②移码与补码的关系:[X]移与[X]补的关系是符号位互为相反数(仅符号位不同),
例如:X=+1011 [X]补=01011 [X]移=11011
X=-1011 [X]补=10101 [X]移=00101
③移码运算应注意的问题:
对移码运算的结果需要加以修正,修正量为2En ,即对结果的符号位取反后才是移码形式的正确结果。
移码表示中,0有唯一的编码——1000…00,当出现000…00时(表示-2En),属于浮点数下溢。
真值、补码和移码的对照表

2、定点表示
在计算机中,小数点不用专门的器件表示,而是按约定的方式标出。共有两种方式表示小数点的存在,即定点表示和浮点表示。定点表示的数称为定点数,浮点表示的数为浮点数。
小数点固定在某一个位置的数为定点数,有以下两个格式。

当小数点位于数符和第一数值之间时,机器内的数为纯小数;当小数点位于数值位之后时,机器内的数为纯整数。采用定点数的机器称为定点机。数值部分的位数n决定了定点机中数的表示范围。若机器数采用原码,小数定点机中数的表示范围是-(1-2-n)~(1-2-n),整数定点机中数的表示范围是-(2n-1)~(2n-1)。
在定点机中,由于小数点的位置固定不变,故当机器处理的数不是纯小数或纯整数时,必须乘上一个比例因子,否则会产生“溢出”。
3、浮点表示
实际上计算机中处理的数不一定是纯小数或纯整数(如3.1416),而且有些数据的数值范围相差很大(如电子的质量9Í10-28g,太阳的质量2Í1023g),它们都不能用定点小数或定点整数表示,但可以用浮点数表示。浮点数即小数点的位置可以浮动的数,如

显然,这里小数点的位置是变化的,但因为分别乘上来不同的10的方幂,故值不变。
通常,浮点数被表示成
![]()
式中,s为尾数(可正可负),j为阶码(可正可负),r是基数(或基值)。在计算机中,基数可取2、4、8或16等。
以基数r=2为例,数N可写成下列不同的形式:

为了提高数据精度以及便于浮点数的比较,在计算机中规定浮点数的尾数用纯小数形式,故上例中0.110101×210和0.00110101×2100形式是可以采用的。此外,将尾数最高位为1的浮点数称为规格化数,即N=0.110101×210为浮点数的规格化形式。浮点数表示成规格化形式后,其精度最高。
1)浮点数的表示形式
浮点数在机器中的形式如下所示。采用这种数据格式的机器称为浮点机。

浮点数由阶码j和尾数s两部分组成。阶码是整数,阶符和阶码的位数m合起来反映浮点数的表示范围及小数点的实际位置;尾数是小数,其位数n反映了浮点数的精度;尾数的符号St代表浮点数的正负。
2)浮点数的表示范围
以通式N=SÍrj为例,社浮点数阶码的数值位取m位,尾数的值取n位,当浮点数为非规格化数时,它在数轴上的表示范围如下图所示。

由图中可见,其最大正数为2( 2m–1)×( 1 – 2–n);最小正数为2–( 2m–1)×2–n;最大负数为–2–( 2m–1)×2–n;最小负数为–2( 2m–1)×( 1 – 2–n)。当浮点数阶码大于最大阶码时,称为上溢,此时机器停止运算,进行中断溢出处理;当浮点数阶码小于最小阶码时,称为下溢,此时溢出的数绝对值很小,通常将尾数各位强置为零,按机器零处理,此时机器可以继续运行。
一旦浮点数的位数确定后,合理分配阶码和尾数的位数,直接影响浮点数的范围和精度。通常对于短实数(总位数为64位),阶码取11位(含阶符1位),尾数取53位(含数符1位);对于临时实数(总位数为80位),阶码取15位(含阶符1位),尾数取65位(含数符1位)。
3)
为了提高浮点数的精度,其尾数必须为规格化数。如果不是规格化数,就要通过修改阶码并同时左右移尾数的办法,使其变成规格化数。将非规格化数转换规格化数的过程称为规格化,对于基数不同的浮点数,因其规格化数的形式不同,规格化的过程也不同。
当基数为2时,尾数最高位为1的数为规格化数。规格化时,尾数左移一位,阶码减1(这种规格化称为向左规格化,简称左规),尾数右移一位,阶码加1(这种规格化称为向右规格化,简称右规)。如上图所示的浮点数规格化后,其最大正数为2( 2m–1)×( 1 – 2–n);最小正数为2–( 2m–1)×2–n;最大负数为–2–( 2m–1)×2–n;最小负数为–2( 2m–1)×( 1 – 2–n)。
当基数为4时,尾数的最高两位不全为零的数为规格化数。规格化时,尾数左移两位,阶码减1;尾数右移两位,阶码加1。
当基数为8时,尾数的最高三位不全为零的数为规格化数。规格化时,尾数左移三位,阶码减1;尾数右移三位,阶码加1。
同理类推,不难得到基数为16或2n时的规格化过程。
浮点机中一旦基数确定后就不再变了,而且基数是隐含的,故不同基数的浮点数表示形式完全相同。但基数不同,对数的表示范围和精度等都有影响。一般来说,基数越大,可以表示的浮点数范围越大,而且所表示的数的个数越多,但基数越大,浮点数的精度反而有所下降。如r=16的浮点数,因其规格化的尾数最高三位可能出现零,故与其尾数位数相同的r=2的浮点数相比,后者可能比前者多三位精度。
四、互动及练习
本次课采用提问的互动方式:
1、数值用补码来比较大小时是否有误差?
用例题让同学们分析,直接用补码比较大小得到的结果是否正确,然后引入移码的概念和表示方法。
2、为什么要将浮点数进行规格化?
让同学们先谈谈自己的看法,然后通过过程和阶码、尾码来分析规格化的原因,再引入怎样将浮点数规格化的过程。
五、课后作业
1、下列数中最小的数为( )。
A.(101001)2 B. (52)8 C. (2B)16 D. (44)10
2、下列数中最大的数为( )。
A. (10010101)2 B. (227)8 C. (96)16 D. (149)10
3、设寄存器位数为8位,机器数采用补码形式(含1位符号位)。对应于十进制-27,寄存器内容为( )。
A.27H B.9BH C.E5H D.-27H
4、对真值0表示形式唯一的机器数是( )。
A. 原码 B.补码和移码 C.只有补码 D.反码
5、在整数定点机中,下述说法正确的是( )。
A. 原码和反码不能表示-1,补码可以表示-1
B. 原码不能表示-1,补码和反码可以表示-1
C. 三种机器数均可表示-1
D.三种机器数均可表示-1 ,且三种机器数的表示范围相同
6、在小数定点机中,下述说法正确的是( )。
A. 只有补码能表示-1 B. 只有原码不能表示-1
C. 只有反码不能表示-1 D. 三种机器数均不能表示-1
7、某机字长8位,采用补码形式(其中1位为符号位),则机器数所能表示的范围是( )。
A.-127~127 B. -127~128 C. -128~128 D. -128~127
8、用n+1位字长表示定点数(其中1位为符号位),它能表示的整数范围是( ),它能表示的小数范围是( )。
A.0≤|N| ≤2n-1 B. 0≤|N| ≤2n+1-1
C. 0≤|N| ≤1-2-(n+1) D. 0≤|N| ≤1-2-n
9、32位字长的浮点数,其中阶码8位(含1位阶符),尾数24位(含1位数符),则其对应的最大正数为( ),最小负数为( ),最小的绝对值为( );若机器数采用补码表示,且位数为规格化形式,则对应的最大正数为( ),最小正数为( ),最小负数为( )。
A. 2127(1- 2-23) B. -2127(1- 2-23) C. 2-129
D. -2+127 E.2-128×2-23 F.2-127×2-23
10、16位长的浮点数,其中阶码7位(含1位阶符),尾数9位(含1位数符),当浮点数采用原码表示时,所能表示的数的范围是( );当采用补码表示时,所能表示的数的范围是( )。
A. -264~264(1- 2-8) B. -263~263(1- 2-8)
C. -263~263(1- 2-9) D. -263(1- 2-8) ~263(1- 2-8)
11、16位长的浮点数,其中阶码7位(含1位阶符),尾数9位(含1位数符),当机器数采用原码表示时,它所能表示的最接近0的负数是( )。当采用补码表示时,它所能表示的最接近0的负数是( )。
A. -2-64 B. -2-71 C. -2-72 D. -2-73
12、将一个十进制数x=-8192表示成补码时,至少采用( )位二进制代码表示。
A. 13 B.14 C. 15 D. 16
13、[x]补=1.000…0,它代表的真值是( )。
A.-0 B.+0 C.-1 D.+1
14、十进制数56的十六进制表示为( ),十进制数-39的十六进制表示为( )(负数用补码表示)。
A. D8 B. D9 C.56 D.38

