6.1 无符号数和有符号数

一、无符号数

寄存器的位数,反映无符号数的表示范围:

8位:0~255;16位:0~65535

二、有符号数

1.机器数与真值

计算机没有硬件来表示小数点,小数点的位置只能通过约定的方式确定。

真值(带符号的数)机器数(符号数字化的数)
+0.10110小数点1011
-0.10111小数点1011
+110001100小数点
-110011100小数点

2.原码表示法

(1)定义:

整数:[x]=0,x(当0<=x<2n)2n -x(-2n <x<=0)

小数:[x]=x(当0<=x<1)1-x(-1 <x<=0)

例:求x=0的原码:

设x=+0.0000,则[+0.0000]=0.0000;设x=-0.0000,则[-0.0000]=1.0000

同理,对于整数[+0]=0,0000,[-0]=1,0000

[+0][-0]

3.原码的特点:简单、直观

但是用原码作加法,会出现如下问题:

要求数1数2实际操作结果符号
加法+++
加法+-/+
加法+-/+
加法

能否只作加法?找到一个与负数等价的整数来代替这个负数

3.补码表示法

结论:

(1)一个负数加上“模”即得该负数的补数;

(2)一个整数和一个负数互为补数时,它们绝对值之和即为模数;

(3)正数的补数即为其本身;

(4)负数的补码=负数的反码+1。

但是补码的定义如下:

[x]=2n+1+x(负整数),2+x(-1<=x<0(mod 2))

4.反码表示法

不再累述

5.三种机器数的小结

(1)最高位为符号位,书写上用“,”(整数)或“.”(小数)将数值部分和符号位隔开;

(2)对于正数,原码=补码=反码;

(3)对于负数,符号位为1,其数值部分原码除符号位外每位取反末位加1得补码,原码除符号位外每位取反得反码。

6.移码表示

补码很难直接判断其真值大小。

(1)移码的定义:

[x]=2n+x

只有整数形式,没有小数形式。

(2)移码和补码的比较:

补码与移码只差一个符号位

(3)真值、补码和移码的对照表

如图1.1所示。

图1.1 真值、补码和移码的对照表

(4)移码的特点

①若x=0,则[+0]=25+0=1,00000(最高位为符号位),[-0]=25-0=1,00000。所以[+0]=[-0]

②当n=5时,最小的真值为-25=-100000,[-100000]=25-100000=000000。

可见,最小真值的移码为全0。

用移码表示浮点数的阶码,能方便地判断浮点数阶码的大小。

 

6.2 数的定点表示和浮点表示

一、定点表示

是指小数点按照约定方式给出。无论是软件还是硬件开发人员,都必须遵循按照约定方式。

有以下两种形式:

1.

数符小数点数值部分

这说明表示的全为小数,若为补码,则能表示的唯一整数是-1。

数符数值部分小数点

这说明表示的全为整数。

由此我们可以把定点机分为两类,一类是小数定点机(形式1)和整数定点机(形式2)。

下面来说一下他们用原码、反码和补码表示的时候的范围。

表2.1 定点机的表示范围

小数定点机

整数定点机
原码-(1-2-n)~(1-2-n)有2n+1-(2n-1)~ (2n-1)
补码-1~(1-2-n-(2n)~(2n-1)
反码-(1-2-n)~(1-2-n-(2n-1)~ (2n-1)

 

二、浮点表示(重点)

0.为什么要在计算机引入浮点数表示?

①编程困难,程序员要调节小数点的位置;

②数的表示范围小,为了能表示两个大小相差很大的数据,需要很长的机器字长;

③数据存储单元的利用率往往很低。

如图2.1所示。

图2.1 浮点表示

    注意:尾数是小数、可正可负,阶码是整数、可正可负。当r=2尾数中的每一位二进制数就表示了尾数的一位;当r=4,尾数当中的2位二进制数表示了1位四进制尾数。如图中所示,原来数是11.0101,当我们固定小数点,将数字右移两位的时候,表示数字变为了原来的四分之一,所以阶码为10(10是十进制的2,22=4);当我们只右移1位时,表示数字变为了原来的二分之一,所以阶码为1(1是十进制的1,21=2);同样,当左移2位的时候,数字变为了原来的四倍,所以阶码为-10,(10是十进制的2,2-2=1/4),剩余一个同理。在计算机中,只有打对号的两个数才能存储,其中第一种小数点后面第1位为1,称为规格化数

1.浮点数的表示形式

图2.2 浮点数的表示形式

Sf表示浮点数的符号;n表示了浮点数的精度,m表示浮点数的表示范围,jf和m(实际是阶符和阶码)共同标识小数点的书记位置。

2.浮点数的表示范围

图2.3 浮点数的表示范围

上溢:阶码>最大阶码。下溢:阶码<最小阶码,按机器零处理。阶码都用原码来表示。

最小负数和最大正数的绝对值其实是一样的。最大正数的尾数最大为全1,阶码也为全1。这样的情况下,尾数为(1-2n),阶码为2m-1,故如图2.3所示。最大负数,最小正数同理。

实际上我们是由有限的个数表示无限多的实数。

练习:机器数字长为24位,欲表示±3万的十进制数,试问在保证数的最大精度的前提下,除阶符、数符各取1位外,阶码、尾数各取几位?

因为2的14次方=16384,2的15次方是32768,满足要求。阶码应该在±15。所以定点数15位二进制数可以反映±3万之间的十进制数。因为要保证数的最大精度,所以尾数尽可能的长,所以阶码位数尽可能短,所以阶码是4位。24-4-1(阶符)-1(数符)=18,为尾数的长度。

3.浮点数的规格化形式

为了保证尽可能保证浮点数的精度,所以要对浮点数进行规格化。

若r=2,尾数最高位为1;

若r=4,尾数最高2位不全为0;

若r=8,尾数最高3位不全为0。

基数不同,浮点数的规格化形式不同。

4.浮点数的规格化

表2.1 浮点数的规格化形式

基值规格化形式规格化方式
r=2左规尾数左移1位,阶码减1
右规尾数右移1位,阶码加1
r=4左规尾数左移2位,阶码减1
右规尾数右移2位,阶码加2
r=8左规尾数左移3位,阶码减1
右规尾数右移3位,阶码加3

基数r越大,可表示的浮点数范围越大,基数r越大,浮点数的精度越大

例如:设m=4,n=10,r=2。尾数规格化的浮点数表示范围:

最大正数:2+1111*0.1111111111=215*(1-2-10);

最小正数:2-1111*0.1000000000=2-15*2-1=216

最小负数:-215*(1-2-10);

最大负数:-2-15*2-1=-216

三、举例

例6.13:将写成二进制定点数、浮点数及在定点机和浮点机中的机器数形式。其中树枝部分均取10位,数符取1位,浮点数阶码取5位(含1位阶符),尾数规格化。

解:设x=,则二进制形式为0.0010011,定点表示为0.0010011000,因为要求10位,所以补3个零。

浮点规格化表示,因为规格化,所以小数点后第一位必须是1,所以表示为。

定点机中,原码=补码=反码=0.0010011000

浮点机中,[x]原=1, 0010;0.1001100000(第一位的1是阶码,0010是阶符,0.1001100000是尾数)

[x]补=1,1110;0.1001100000

[x]反=1,1101;0.1001100000

例6.14:将 –58 表示成二进制定点数和浮点数,并写出它在定点机和浮点机中的三种机器数及阶码 为移码、尾数为补码的形式(其他要求同上例)。

解:设x=-58,则写为二进制表示为x=-111010,定点表示为-0000111010,浮点规格化形势为-(0.1110100000*2110)。定点机中,[x]原=1,0000111010,[x]反=1,1111000101,[x]反=1,1111000110。

浮点机中[x]原=0,0110;1.11101000000;[x]补 = 0, 0110; 1. 0001100000;

[x]反 = 0, 0110; 1. 0001011111        [x]阶移、尾补 = 1, 0110; 1. 0001100000

机器零

浮点数尾数为0时,不论其阶码为何值按机器零处理。

浮点数阶码等于或小于它表示的最小数时,不论尾数为何值,按机器零处理。

总的来说,是以下两种情况:

(1)x,xxxx;0.0000…000

(2)(阶码-16)1,0000;x.xx…xxx

当阶码用移码,尾数用补码表示时,机器零为0,0000;0.00…0

这非常有利于机器中“判0”电路的实现。

四、IEEE 754标准

格式如图2.4所示。

图2.4 IEEE 754标准浮点数示意图

    由于尾数为规格化表示,那么最高位一定是1,所以可以把这1位省略掉,这样可以提高精度。如表2.2所示

表2.2 IEEE 754数的类型

类型符号位S阶码尾数总位数表示范围
短实数182332
长实数1115264
临时实数1156480