概述
实数是带有小数部分和整数部分的数字,也就是我们通常说的小数。
对于小数点,计算机采用了两种表示方法:定点表示法和浮点表示法
定点表示法:
整数可以被看作是小数点位置固定在最右边的数字,因此定点表示法用来存储整数,这种表示法中,小数点是假定的并不进行存储。
如果使用定点表示法来表示实数的话,结果会损失精度。
例如,在一个十进制系统中,假设使用一种小数点右边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
最后
以上就是贪玩跳跳糖为你收集整理的实数是如何存储在计算机内部的的全部内容,希望文章能够帮你解决实数是如何存储在计算机内部的所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复