概述
float型数据在计算机中如何存储?
- 二进制的科学记数法
- float型数据的存储方式
参考链接:
https://www.cnblogs.com/jillzhang/archive/2007/06/24/793901.html
https://baike.baidu.com/item/科学记数法/1612882?fr=aladdin
https://www.jianshu.com/p/a103cfa0f6f0 (浮点数的移位存储)
二进制的科学记数法
百度百科定义: 科学记数法是一种记数的方法,把一个数表示成a与10 的n次幂相乘的形式(1≤|a|<10,a不为分数形式,n为整数),这种记数法叫做科学记数法。
上述定义的是人们常接触到的十进制科学记数法。例如十进制数123.5的科学记数法应表示为1.235*102。通用计算机一般采用二进制存储方式,不能直接识别十进制数,需要做进制转换。上述123.5的二进制表示为1 111 011.1,其对应的科学记数法表示为1.111 011 1 * 26。由于二进制科学记数法的整数位只能为1,故可缺省表示该位。
float型数据的存储方式
C语言和C#语言中,float(单精度浮点类型)数据占用32bit,遵从IEEE R32.24规范,具体分为3个部分:
- 1bit符号位(sign): 0 表示正数, 1 表示负数。
- 8bit指数位(exponent): 用于存储二进制科学记数法中的指数数据,范围是-127~128,并且采用移位存储。
- 23bit尾数部分(mantissa):科学记数法中的小数部分。由于整数位可缺省表示,实际表达的精度为24bit。
第2点中的移位存储的含义是:直接用二进制0000 0000 ~ 1111 1111表示-127~128,即设科学记数法中的指数值为x,指数位的值实际存储为 (127+x),对应关系示例如下:
0000 0000,表示-127;
倒推过程:1000 0001+0111 1111=(1)0000 0000,其中1000 0001为8位有符号数,表示-127。
0111 1111,表示0;
1000 0000,表示1;
1111 1111表示128.
倒推过程:1000 0000+0111 1111=1111 1111,有符号数的8bit的表示范围是-128~127,不能表达128。
综合上述结果的猜测:C语言float类型数据8bit指数位的表示中,可能在正整数时采用了无符号8bit数据类型,负整数时采用了有符号8bit数据类型。
二进制数1.111 011 1 * 26在内存中的表示为:
- 1bit 符号位的值为0
- 8bit指数位的值为(127+6)=133,即1000 0101
- 23bit尾数部分的值为1110 1110 0000 0000 0000 000
(0) (1000 0101) (1110 1110 0000 0000 0000 000)
即0100 0010 1111 0111 0000 0000 0000 0000
该32bit数对应的十六进制表示为:0x 42 F7 00 00
最后
以上就是平常钢笔为你收集整理的float型数据在计算机中如何存储?二进制的科学记数法float型数据的存储方式的全部内容,希望文章能够帮你解决float型数据在计算机中如何存储?二进制的科学记数法float型数据的存储方式所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复