当前位置: 首页 > article >正文

【C语言】浮点型数据存储 和 整型数据存储的区别

现在计算机中的浮点数存储都是遵循IEEE754/854标准,以二进制的科学计数法存放到内存中。二进制浮点数是以符号数值表示法的格式存储——最高有效位被指定为符号位(sign bit);“指数部分”,即次高有效的e个比特,存储指数部分;最后剩下的f个低有效位的比特,存储“有效数”(significand)的小数部分(在非规约形式下整数部分默认为0,其他情况下一律默认为1)。

对于浮点数在计算机中有两种存储的精度,即单精度和双精度,单精度是32位,双精度是64位。

float 的内存分布   符号位(1bit)指数部分(8bits) 尾数部分(23bits)
double 的内存分布  符号位(1bit)指数部分(11bits)尾数部分(52bits)

请添加图片描述

  • S 符号位:0表示正数;1表示负数
  • E 指数:即阶码,指明了小数点在数据中的位置
  • M 尾数:小数点后面的存储部分
    • 为了让指数表示正、负引入了偏差码,float的为127,double的为1024

浮点数在计算机中的存储:

定义变量   float a;
十进制小数  a=10.5
大小: 4个字节 ---> 32位bit位 
10.5   ---->转化为二进制指数格式 
10 :-->十进制 转 二进制:1010
0.5:-->小数 十进制 转 二进制:0.1
组合转成二进制小数形式: 1010.1 ---> 把二进制小数转成科学计数法的形式(指数形式): 1.0101 * 2^3
S 符号:0
E 指数:3 127+3=130 ---> 二进制为:10000010
M 尾数:0101 ---> 01010000000000000000000
所以,小数10.5在内存中的存储形式:0 10000010 01010000000000000000000

存储: 
	符号位: 0 
	指数位:1000 0010 --->指数3(引入偏差码)
	小数位:0101 补 19个0 

反之,将浮点数机器码转为小数形式:
例如:随机数 0 1000 0011 11101100000000000000000
	S 符号:0
	E 指数:1000 0011 --->131 ---> 131-127=4
	M 尾数:11101100000000000000000
	
	二进制小数形式:1.111011 * 2^4 ---> 11110.11 
	整数部分11110 ---> (0001 1110)---> 转换后结果为:30;
	小数部分0.11 权位相加↓
	0.5+0.25=0.75

索引
4 3 2 1 0 -1 -2
1 1 1 1 0. 1  1
1*2^4 + 1*2^3 +1*2^2^2 + 1*2^1 + 1*2^-1 + 1*2^-2(权位相加)
16        8       4        2      0.5      0.25

最终结果:
30.75

double a;
初始化/赋值和float一样 
大小: 8个字节 --- 64位长度
存储结构:64位
运算逻辑和float一样,因为64位太长,这里就不做演示了。

一定要很清楚数据在计算机的存储方式,知道数据布局可以帮助优化内存访问,提高程序运行效率;理解数据存储有助于识别和解决内存相关错误,如缓冲区溢出。确保数据类型和大小正确,避免精度损失或数据截断;不同平台的数据表示可能不同,了解存储方式可确保程序的可移植性等。

总之,了解数据存储方式是编写高效、安全、可靠代码的基础。

以上。

我是一个十分热爱技术的程序员,希望这篇文章能够对您有帮助,也希望认识更多热爱程序开发的小伙伴。
感谢!


http://www.kler.cn/a/388747.html

相关文章:

  • sql server 查看io资源使用
  • 【云计算解决方案面试整理】1-2云计算基础概念及云计算技术原理
  • GIS空间分析案例---城市公共设施配置与服务评价
  • POI实现根据PPTX模板渲染PPT
  • LeetCode【0031】下一个排列
  • 重构代码之内联临时变量
  • 基于深度学习的路面裂缝检测算法matlab仿真
  • C#-运算符重载
  • Redis运行时的10大重要指标
  • 1688拿货经验分享:亚马逊中小卖家如何选合作厂家
  • JS面试题之---解释一下什么是闭包?
  • 【日常经验】RPC 调用的分类及示例
  • 非关系型数据库NoSQL的类型与优缺点对比
  • API接口精准获取商品详情信息案例
  • 【前端】Svelte:响应性声明
  • 动态规划(二)——路径问题
  • Android13 系统/用户证书安装相关分析总结(三) 增加安装系统证书的接口遇到的问题和坑
  • VScode配置C、C++环境,编译并运行并调试
  • Java之List常见用法
  • VUE3实现好看的通用网站源码模板
  • 深度学习经典模型之VGGNet
  • <<零基础C++第一期,C++入门基础之引用知识点>>
  • JavaWeb--Maven
  • 系统安全第五次作业题目及答案
  • Could not create task ‘:shared_preferences_android:generateDebugUnitTestConfig‘
  • 大数据机器学习算法和计算机视觉应用01:博弈论基础