我是靠谱客的博主 平常钢笔,最近开发中收集的这篇文章主要介绍float型数据在计算机中如何存储?二进制的科学记数法float型数据的存储方式,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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个部分:

  1. 1bit符号位(sign): 0 表示正数, 1 表示负数。
  2. 8bit指数位(exponent): 用于存储二进制科学记数法中的指数数据,范围是-127~128,并且采用移位存储。
  3. 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在内存中的表示为:

  1. 1bit 符号位的值为0
  2. 8bit指数位的值为(127+6)=133,即1000 0101‬
  3. 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型数据的存储方式所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(59)

评论列表共有 0 条评论

立即
投稿
返回
顶部