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

【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 11101100000000000000000S 符号:0E 指数:1000 0011 --->131 ---> 131-127=4M 尾数: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.75double a;
初始化/赋值和float一样 
大小: 8个字节 --- 64位长度
存储结构:64位
运算逻辑和float一样,因为64位太长,这里就不做演示了。

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

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

以上。

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


http://www.mrgr.cn/news/68910.html

相关文章:

  • Java多线程详解⑦(全程干货!!!)内存可见性 || volatile || JMM || wait notify notifyAll
  • 温度传感器的工作原理
  • GEE ui界面实现:用户自画多边形, 按面积比例在多边形中自动生成样点,导出多边形和样点shp,以及删除上一组多边形和样点(有视频效果展示)
  • Mysql在oracle的安装与配置(怕忘)
  • X 正在测试免费版人工智能聊天机器人 Grok
  • Java并发学习总结:ThreadLocal
  • QT最新版6.8在线社区版安装教程
  • C语言 | Leetcode C语言题解之第552题学生出勤记录II
  • PyQt入门指南四十七 内存管理技巧
  • 解释Python中的装饰器的作用
  • SpringBoot12-Shiro
  • 论文重复率从58%降到38%,死活降不下去了,怎么办?
  • 【C语言】位运算
  • 国产操作系统ctyun下安装Informix SDK开发包的方法
  • Python练习13
  • Git国内国外下载地址镜像,git安装视频教程
  • Golang | Leetcode Golang题解之第552题学生出勤记录II
  • Android 下内联汇编,Android Studio 汇编开发
  • 云计算在远程办公中的应用
  • PMP–知识卡片--项目干系人
  • 科研绘图系列:R语言热图和点图(heatmap dotplot)
  • Python软体中使用Matplotlib绘制散点图的实用指南
  • 【RMA】基于知识注入和模糊学习的多模态歧义分析
  • [DB] Project-1-MySQL
  • 【RocketMQ】无法访问此网站 http://XXX:10080/ ERR_UNSAFE_PORT
  • 【计网不挂科】计算机网络期末考试(综合)——【选择题&填空题&判断题&简述题】完整题库