实数是如何存储在计算机内部的

     实数是带有小数部分和整数部分的数字,也就是我们通常说的小数。
     对于小数点,计算机采用了两种表示方法:定点表示法和浮点表示法

定点表示法
          整数可以被看作是小数点位置固定在最右边的数字,因此定点表示法用来存储整数,这种表示法中,小数点是假定的并不进行存储。
          如果使用定点表示法来表示实数的话,结果会损失精度。
          例如,在一个十进制系统中,假设使用一种小数点右边2个数码,左边14个数码,总共16个数码的定点表示法来表示十进制数3.1415926,那么该系统的实数精度就会受损,将会被存储成3.14。
           同样的在一个十进制系统中,假设使用一种小数点右边6个数码,左边10个数码,总共16个数码的定点表示法来表示十进制数15456987542588.123,那么该系统的实数精度就会受损,将会被存储成6987542588.123,整数部分变小了很多。
          所以使用定点表示法来存储带有很大的整数部分,或很小的小数部分的实数是不科学的。所以计算机通过使用浮点表示法存储实数来解决这个问题。


浮点表示法:
         该表示法允许小数点进行移动,可以在小数点左右有不同数量的码,也极大增加了实数可存储的范围。
          无论十进制还是二进制使用浮点表示法都是由三部分组成:符号  位移量  定点部分
          例如用科学表示法(浮点表示法)表示十进制数字  +3145600000 方法就是
+3.1456×10^9 符号部分就是(+),位移量就是9,(3.1456)是定点部分
用同样的方法表示二进制数据10101100000000.00就是 +1.01011×2^13
同样的方法表示二进制数字-(0.0000000001011)为 -1.011×2^(-10)
          为了规范化,科学记数法(十进制)和浮点表示法(二进制),小数点左边都只保留了一位的非零数码。
     规范化后的二进制数我们只存储了该数的3部分:符号,指数,尾数
例如+1000111。0101规范化后变成了 +1.0001110101×2^6,’+’是符号,指数是6,尾数是0001110101,需要注意的是小数点和定点部分左边的1并没有存储是隐含的。
        其中符号部分采用一个二进制位来存储(0或1)
          尾数是指小数点右边的二进制数,定义了该数的精度,尾数是作为无符号整数存储的。如果将符号一起考虑的话可以说是通过符号加绝对值存储的
          指数是可正可负的,计算机中使用余码表示法来存储指数。
什么是余码表示法:

为了让正的和负的整数都可以作为无符号数存储,计算机通常采用余码表示法。在余码系统中,使用一个正整数(称为一个偏移量)加到每个数字中,用于把它们统一移到非负的一边。这个偏移量的值是2^(n-1)-1,n是内存单元存储指数的大小。

例如,我们可以用4位存储单元在数字系统中表示16个整数。使用一个单元作为0,分开其他15个(不等地)我们可以在-7到8的范围中表示整数(此时有正负数)。在该范围中增加7个单位到每个整数中,我们可以统一把所有整数向右移,使其均为正整数而无须改变这些整数的相对位置,避免了相互调整。新系统称为余7码系统,或者偏移量为7的偏移表示法。

这种新的表示法与移位前的表示法相比,其优点在于余码系统中的所有整数都是正数,当我们在这些整数上进行比较或运算时不需要考虑符号。对于4位存储单元,如我们希望那样,偏移量是24-1-1=7。
电气和电子工程师协会(IEEE )制定的几种浮点数存储标准,我们这里讨论最常用的单精度(float)双精度(double)下面是具体的格式:
                             符号位     指数     尾数    
余127码   float           1          8         23     
余1023码 double       1         11        52      

实数存储进内存分为以下几个步骤:
1.在符号位中存储符号(0或1)
2.将数字转化为二进制
3.规范化
4.求得指数和尾数的值
5.组合并存储
例:写出十进制数-0.0234375的余127码(单精度)表示法
第一步:符号位存储为1;
第二步:将十进制0.0234375转换为二进制(0.0000011)
第三步:规范化:1.1×2^(-6)
第四步:指数等于-6+127=121 转化为8位的二进制为01111001,尾数是1在右边加上22个0使之变成23位10000000000000000000000
第五步:存储为 1   01111001    10000000000000000000000
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值