计算机中数的表示

数据表示:在计算机中能够直接被硬件直接识别和处理的数据类型。即在计算机的指令系统中有对这些中数据类型进行操作的指令。

无符号数

若无符号数保存在寄存器中,寄存器的位数,反映了无符号数的表示范围。
如:如果寄存器位数为8位,存储数据范围为:
在这里插入图片描述

如果寄存器位数为16位,存储数据的位数范围:
在这里插入图片描述

有符号数

(一)真值和机器

首先要明白真值和机器数 的区别:
真值: 平时用的真实的值,带有符号的。
机器数: 保存在计算机中的数。
在这里插入图片描述
把一个数据保存在计算机中需要保存三部分内容,符号、小数点位置,数的数值位,如上图中的+0.1011,使用0和1两种状态代表正负状态,1011保存在寄存器中,在计算机中没有专门硬件表示小数点,计算机中的小数点都是以约定的方式给出的,如+0.1011在设计计算机硬件的时候,就约定对于保存小数,小数点默认在符号位的后面(这种)。而对于整数,小数点的位置在设计硬件时约定放于数值部分的最后。这样可以把定点计算机(小数点位置固定的计算机)分为两类,小数定点机和整数定点机。

下面说到的原码,补码,反码,移码表示法都是在计算机中的表示,都属于机器数。

(二)原码表示法

1、整数表示

对于正数,原码表示方式为将数据的符号位用0表示。为了使得符号位用0表示,只需要在数值位的最高位添加0即可。
对于负数,原码表示方式为将数据的符号位用1表示。为了使得符号位用1表示,只需要在真值的绝对值的基础上加上2^n即可。

根据以上分析,得到如下定义:
在这里插入图片描述

根据以上的定义举例如下:
在这里插入图片描述

定义中,正数的范围X>=0,负数X<=0,如果X = 0,计算出来的X原码不同。

在这里插入图片描述

2、小数表示

对于正数,原码的表示方式和真值去掉符号后相同,但是,小数点前面的0,在真值中表示这是这小数,在原码中表示这个原码的符号位为正号。

对于负数,原码的表示方式为:去掉符号,将小数点前的0变为1,表示符号为负。只需要在真值的绝对值的基础上加1即可。

得到定义如下:
在这里插入图片描述

根据以上定义,举例如下:
在这里插入图片描述
无论是整数中的逗号,还是小数中的小数点,在计算机中是不存储的,仅仅是为了为的直观识别而添加的。

3、原码特点

原码的表示形式是简单,直观,但是使用原码进行加减法运算是会会出现如下问题:
在这里插入图片描述

对于上面的操作,同样的加法操作,但是运算器实际的操作可能是加法,也可能是减法,对于运算器来说是比较麻烦的,那能不能对加法和减法进行归一化:只用加法就能完成加法和减法的操作。即:找到一个与负数等价的正数 来代替这个负数, 就可使得加负数和加另一个正数结果相同,即将减法操作转化为了加法操作。这样就能将加法和减法操作统一为加法操作。补码就是为了解决加减法归一化的问题。

(三)补码表示法

1、补的概念
对于时钟,如果我们要把时钟从6点调整到3点,我们可以进行哪些操作?
在这里插入图片描述

很显然能想到可以进行顺时针调整和逆时针调整。
在这里插入图片描述

顺时针调整减去12,因为时钟以12为模,即如果显示的时间到12,时间归零。所以,对于上面的调整操作,对于这种有模的、能够记录数据的设备,我们可以使用9代替-3,把减法变成加法操作。这时候我们可以称 +9 是 -3 以12为模的补数。记作:
在这里插入图片描述

对于对时钟的调整操作,可以得出以下结论:
(1)一个负数加上 “模” 即得该负数的补数 。
(2)一个正数和一个负数互为补数时,它们绝对值之和即为模数。

计算机中的数据存储设备和时钟是相似的,比如我们要存放一个整数,存放这个整数的寄存器的位数为4位,那这个寄存器计数的时候,一旦进行加法操作的时候,它的值大于或者等于16,进位部分将会被自动的丢弃,这点和时钟很相似,区别在于时钟以12为模,4为的寄存器以16为模。如把1011变为0有两种方式:
在这里插入图片描述

可见 1011 可用 + 0101 代替,记作:
在这里插入图片描述

同样的可以可以的到如下事例:
在这里插入图片描述

以上计算的都是负数的补数,那正数的补数是多少呢?
在这里插入图片描述

根据上图可知,正数的补数为其本身。

因为0101即是-1011的补数,又是+0101(其本身)的补数,那+0101到底是谁的补数呢?

所以在计算机中,表示0101的补数时,在其补数前面添加0表示符号位,用逗号与数值部分隔开,表示为:” 0,0101” 。表示-1011的补数时,在其补数前面添加1表示符号位,用逗号与数值部分隔开,表示为:” 1,0101” 。如下图所示:
在这里插入图片描述

0101是-1011的补数,而10101是-1011的补码,如何计算补码呢?
-1011 + 10000 = 补数 = 0101
补数 + 10000 = 补码 = 10101
即得到:-1011的补码 = -1011 + 10000 + 10000 = -1011 + 2 ^ 4 + 2 ^ 4 = -1011 + 2^5。
这样,得到的补码,就可以用最高位区分是正数还是负数。而此时原数和补码之间的模就是2^( n+1),即如下所示:
在这里插入图片描述

2、补码定义
根据上面的分析,可以得出补码的定义如下:

(1)整数的补码

在这里插入图片描述

举例如下:
在这里插入图片描述

(2)小数的补码

在这里插入图片描述

举例如下:
在这里插入图片描述

3、求补码的快捷方式

推导过程如下:
在这里插入图片描述

如上图所示,将2 ^ 5表示为 2 ^ 5 - 1 + 1, 其中 2 ^ 5 - 1 - 1010 为11111 - 1010,即相当于原码(11010)符号位不变按位取反。所以可以得出如下结论:

当真值为 负 时,补码 = 原码除符号位外 每位取反,末位加 1 。从补码的定义 [X]补 = 2^(n + 1) + X 可知,从补码到原码的推导过程依然符合以上结论。

举例如下:
在这里插入图片描述
上图中,补码1.0000表示的真值是-1.0000,没有对应的原码。

(四)反码表示法

反码表示为符号位不变,其余位按位取反。具体定义如下:

1、整数
在这里插入图片描述

举例如下:
在这里插入图片描述

2、小数
在这里插入图片描述

举例如下:
在这里插入图片描述

下面对前面讲到的原码,补码,反码就行简单的总结:

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

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

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

(4)设机器数字长为 8 位(其中1位为符号位) 对于整数,当其分别代表无符号数、原码、补码和 反码时,对应的真值范围各为多少?
在这里插入图片描述
(5)已知 [y]补 求[ -y]补?
在这里插入图片描述
结论:[y]补连同符号位在内,,每位取反,末位 + 1 即得[- y]补

(五)移码表示法

补码表示很难直接判断其真值大小,具体情况如下:
在这里插入图片描述

如果此时不使用补码比较大小,而是将 X + 2^n得:
在这里插入图片描述

这种表示方法为移码,移码定义如下:
在这里插入图片描述

移码在数轴上表示:
在这里插入图片描述

举例:
在这里插入图片描述

移码定义中:
(1) 不管是正数还是负数,变成移码的方式都是加上2^n
(2) 从定义中看,只有整数形式定义,没有小数形式定义,这和移码在计算机的数据表示中的作用有关,通常情况下,移码用于表示浮点数据表示的阶码部分,阶码都是整数,所以移码中只给出了整数形式的定义。

移码和补码比较:
在这里插入图片描述

结论:补码与移码只差一个符号位。

真值、补码和移码的对照表如下:
在这里插入图片描述
移码的特点:
在这里插入图片描述
可见,最小真值的移码为全 0。用移码表示浮点数的阶码 ,能方便地判断浮点数的阶码大小。

定点数和浮点数表示

(一)定点表示

定点表示中,小数点按照约定方式给出,位置由计算机体系结构设计人员在设计计算机体系结构的时候约定的,在硬件实现和软件实现的时候,都要遵守这个约定, 根据约定位置的不同,有两种形式:

在这里插入图片描述

根据上图:
(1)如果小数点在左图中的位置,表示计算机中存放或者处理的定点数都是小数,如果是补码形式,它能够表示的唯一的整数就是-1。

(2)如果小数点放在右图中的位置,计算机中的定点数都是整数。

根据一台定点计算机约定的小数点的位置,可以吧定点计算机分为两类:

小数定点机: 小数点放在数符的后面,数值的前面。如上左图。

整数定点机: 小数点位置放在数值部分的后面。如上右图。
在这里插入图片描述

(二)浮点表示

1、为什么在计算机中要引入浮点数表示?

定点存储存在如下问题:
(1)编程困难,程序员要调节小数点的位置;
在编写程序过程中,经常会使用到浮点数,在定点机中,如果用到浮点数,需要程序员自己调整小(2)数据的表示范围非常小,为了能够表示两个大小相差很大的数据,需要很长的机器字长。
在这里插入图片描述

如上图,如果在某一个科学计算的问题上,需要同时保存电子的质量和太阳的质量,两者的差距是10^61 ,为了能够在计算机中同时保存两个数据,如果用二进制数表示这么大的差距,需要203位的二进制数据。即使有了203位存储单元,这个存储单元可以两个数据,但是保存电子质量的那个存储单元大部分的值都是0,尤其是高位部分,就会导致大量的空间被浪费。
(3)数据存储的利用率很低

2、浮点表示的格式是什么?
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

r = 2,尾数中1位二进制数,表示了一位2进制的数。
r = 4,尾数中2位二进制数,表示了一位4进制的数。
r = 8,尾数中3位二进制数,表示了一位8进制的数。
r = 16,尾数中4位二进制数,表示了一位16进制的数。
在这里插入图片描述

如上面的举例中,阶码j用二进制表示,11.0101将其右移2位变为0.110101,相当于将其变为原来的四分之一,为了保持不变,需要将0.110101乘以4,所以是2的2次方,j = 2用二进制表示,为10.所以为0.110101 * 2^10。其余同理。

在上面,对于r = 2,N = 11.0101共使用了五中表示形式,其中有两种表示形式是合法的,如上图中划对号的两个,两个的尾数我们采用小数定点表示,尾数的值均是小于等于1的,两种方式都可以把其存放于计算机中,但是其中第一种方式是比较特殊的,数值位的最高位是非0的,这种表示形式称为规格化数。

在计算机中,浮点数如何进行存储呢,前面说过,数据在计算机中表示方式为机器数,浮点数在计算机中进行存储,也需要以机器数形式进行存储,如果在设计计算机过程中,我们已经约定了我们尾数的基值r采用二进制(r = 2),或者采用四进制(r = 4)等,那么,在浮点数的存储过程中,只需要把浮点数的尾数部分,阶码部分,包括数符和阶符存储起来,用之前讲解的机器数的表示形式,按照计算机设计的时候的规定尾数取多少位,数符是一位,阶符是一位,这样就可以把浮点数存放在计算机中。经过分析,得出浮点数存放形式如下:
在这里插入图片描述
3、浮点数的表示范围?

依据刚刚给出的浮点数的表示格式,分析浮点数的表示范围,假设,现在不考虑数据的规格化,无论是尾数还是阶码,都是用原码形式进行表示,那么给定浮点数的表示方式,在数轴上可以分析浮点数表数范围:
在这里插入图片描述
上图中,表示了浮点数的范围,并将m = 4,n = 10带入计算,当m = 4, n = 10时,实际上这种方式能表示的数据的长度一共是16位,一位表示阶符,一位表示尾符,4位表示阶码,10表示尾数数值部分。能够表示的二进制数的个数是2^ 16,如果我们的机器使用这样的格式表示浮点数,那就是使用2^16个二进制数来表示最小负数和最大整数之间的所有的数。

由上可知,位数决定数据的精度,阶码决定数据大小。

举例:
在这里插入图片描述
4、为什么要引入规格化表示?

尽可能保证数据的精度,如果不进行规格化,尾数的小数点后面可能会有若干个0,在计算机中,尾数的长度是有限的,超出给定长度的尾数的值被截断扔掉,要种影响尾数精度,为了尽可能保证数据精度,所以要让有效位数尽可能多,所以采用规格化形式,则有:
在这里插入图片描述

即,基数不同,浮点数的规格化形式不同。将浮点数进行规格化的方式:

在这里插入图片描述

从上面可以看出:
基数 r 越大,可表示的浮点数的范围越大 ,浮点数的精度降低。

举例:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
5、机器0

(1)当浮点数 尾数为 0 时,不论其阶码为何值 按机器零处理 。
(2)当浮点数阶码等于或小于它所表示的最小数时,不论尾数为何值,按机器零处理。

举例:
在这里插入图片描述

这种机器零方式,有利于机器中“ 判 0 ” 电路的实现。

6、目前浮点数表示格式的标准是什么?

IEEE 754 标准,格式如下:
在这里插入图片描述

上面的格式中,小数点的位置即是阶码小数点位置,又是尾数小数点位置,要求尾数为规格化表示 ,如果使用这种方式进行表示,在基值为2的情况下,不管是原码、补码、反码,尾数非 “0” 的有效位最高位为 “1”。既然最高位一定是1,那第一位就可以直接隐含掉,可以不在数据中进行表示,在计算中进行补齐即可,这样做的好处实际上增加了尾数的位数,增大了尾数能够表示的精度。

IEEE 754 标准中对实数有三种规定:
在这里插入图片描述

  • 12
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值