C语言浮点型数据在内存中的存储及取出等的介绍

2024-04-27 21:52

本文主要是介绍C语言浮点型数据在内存中的存储及取出等的介绍,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 前言
  • 一、浮点型在内存中的存储
  • 二、浮点数存储规则
  • 三、浮点数在内存中的存储(32位)float类型
  • 四、浮点数在内存中的存储(64位)double类型
  • 五、指数E从内存中取出分成三种情况
    • 1. E不全为0或不全为1
    • 2. E全为0
    • 3. E全为1
  • 六、有关案例
  • 总结


前言

C语言浮点型数据在内存中的存储及取出、有关案例等的介绍

一、浮点型在内存中的存储

  • 浮点型数据的范围是在 float.h 头文件中定义的。
  • 整型的数据的范围是在 limits.h 头文件中定义的。

二、浮点数存储规则

  • 浮点数的二进制位中,小数点后面数字的权重从2-1 ----> 2-2 ------>…等逐渐变化。

  • 因此若表示5.5 则二进制表示方法位 101.1, 即为5.5。

  • 但是,若表示5.6,101.11大于5.6, 101.101也大于5.6。

  • 所以表示5.6 需要很多位0或1来凑,所以浮点数不能精确表示有些值,只能近似表示。
    在这里插入图片描述

  • IEEE 754 规定

  • 任何一个浮点数都可以表示成 -1S × M × 2E

  • S 若为0, 则为正数,若为1,则为负数

  • E指的是把M表示成科学计数法,小数点移动的位数, 类似于10进制科学计数法

  • M是一个 大于等于1并且小于 2 的数字

  • 所以浮点数在内存中存储的是 S M E 相关的值

三、浮点数在内存中的存储(32位)float类型

  • 最高位存储 S符号位
  • 中间8位存储E的值
  • E 是一个无符号整型的值float类型范围为0 - 255,但是实际情况中E的值可能为负
  • 所以 标准规定,存入E的值时,用 E 的值 加 中间数来进行修正
  • float 类型的中间数是 127.
  • M 是有效数字在1 - 2 之间
  • 但是存储时,只存储小数点后面的,不存储1,在使用时加上1即可。

四、浮点数在内存中的存储(64位)double类型

  • 最高位存储 S 即符号位
  • 中间11位存储E的值
  • E 是一个无符号整型的值double类型范围为0 - 2047,但是实际情况中E的值可能为负
  • 所以 标准规定,存入E的值时,用 E 的值 加 中间数来进行修正
  • double 类型的中间数是 1023.
  • M 是有效数字在1 - 2 之间
  • 但是存储时,只存储小数点后面的,不存储1,在使用时加上1即可。

在这里插入图片描述

五、指数E从内存中取出分成三种情况

1. E不全为0或不全为1

  • 这是浮点数就采用如下规则
  • 指数E的计算值减去127(或1023),得到真实值,再将有效数字M前加上第一位1。
  • 例如
5.5 二进制位 101.1
表示成标准形式为 -1^0 * 1.011 * 2^2
- 存入数据时:存入S 为 0存入的E为 2 + 127 = 129 二进制为 10000001存入M为 011 但需要在后面进行补0,至23位或52位即 01100000000000000000000所以存入的数据表示为0 10000001 01100000000000000000000E 的部分不全为0 或不全为1
- 取出数据时:S 不变 S = 0E 由存入的计算值减127得到真实值 2 M 加上 11.01100000000000000000000所以取出为-1^0 * 1.01100000000000000000000 * 2^2 // 5.5

2. E全为0

  • 存入的E 全为0,则说明,标准形式中2 的指数非常接近 -127,说明此时的数字非常小。
  • 所以标准规定 此时 E1-127(或1 - 1023)M不再加上第一位的1,而是直接还原为0.xxxxxxx,表示**±0以及接近于0的很小的数字**。

3. E全为1

  • 存入的E 全为1,则说明,标准形式中2 的指数非常接近 128,说明此时的数字非常大。
  • 这时,如果有效数字M全为0, 表示±无穷大(正负取决于S)。

六、有关案例

#include <stdio.h>
int main()
{int n = 9;float* pFloat = (float*)&n;printf("n的值为: %d\n", n); // 9// 9 的二进制序列为// 00000000000000000000000000001001// 以浮点型取出// 0 00000000 00000000000000000000100// E 全为0 结果为 0.000000// 以浮点型进行存储// -1^0 * 1.001 * 2^3// 0 10000010 00100000000000000000000// 以整型打印// 01000001000100000000000000000000 // 一个很大的数// 以浮点型打印// -1^0 * 1.001 * 2^3 // 9.0printf("*pFloat的值为: %f\n", *pFloat);// 0.000000*pFloat = 9.0;printf("num的值为: %d\n", n); // 1091567616printf("*pFloat的值为: %f\n", *pFloat); // 9.000000return 0;
}

总结

C语言浮点型数据在内存中的存储及取出、有关案例等的介绍

这篇关于C语言浮点型数据在内存中的存储及取出等的介绍的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/941635

相关文章

一文教你Python如何快速精准抓取网页数据

《一文教你Python如何快速精准抓取网页数据》这篇文章主要为大家详细介绍了如何利用Python实现快速精准抓取网页数据,文中的示例代码简洁易懂,具有一定的借鉴价值,有需要的小伙伴可以了解下... 目录1. 准备工作2. 基础爬虫实现3. 高级功能扩展3.1 抓取文章详情3.2 保存数据到文件4. 完整示例

使用Java将各种数据写入Excel表格的操作示例

《使用Java将各种数据写入Excel表格的操作示例》在数据处理与管理领域,Excel凭借其强大的功能和广泛的应用,成为了数据存储与展示的重要工具,在Java开发过程中,常常需要将不同类型的数据,本文... 目录前言安装免费Java库1. 写入文本、或数值到 Excel单元格2. 写入数组到 Excel表格

python处理带有时区的日期和时间数据

《python处理带有时区的日期和时间数据》这篇文章主要为大家详细介绍了如何在Python中使用pytz库处理时区信息,包括获取当前UTC时间,转换为特定时区等,有需要的小伙伴可以参考一下... 目录时区基本信息python datetime使用timezonepandas处理时区数据知识延展时区基本信息

Qt实现网络数据解析的方法总结

《Qt实现网络数据解析的方法总结》在Qt中解析网络数据通常涉及接收原始字节流,并将其转换为有意义的应用层数据,这篇文章为大家介绍了详细步骤和示例,感兴趣的小伙伴可以了解下... 目录1. 网络数据接收2. 缓冲区管理(处理粘包/拆包)3. 常见数据格式解析3.1 jsON解析3.2 XML解析3.3 自定义

SpringMVC 通过ajax 前后端数据交互的实现方法

《SpringMVC通过ajax前后端数据交互的实现方法》:本文主要介绍SpringMVC通过ajax前后端数据交互的实现方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价... 在前端的开发过程中,经常在html页面通过AJAX进行前后端数据的交互,SpringMVC的controll

C#使用StackExchange.Redis实现分布式锁的两种方式介绍

《C#使用StackExchange.Redis实现分布式锁的两种方式介绍》分布式锁在集群的架构中发挥着重要的作用,:本文主要介绍C#使用StackExchange.Redis实现分布式锁的... 目录自定义分布式锁获取锁释放锁自动续期StackExchange.Redis分布式锁获取锁释放锁自动续期分布式

Pandas统计每行数据中的空值的方法示例

《Pandas统计每行数据中的空值的方法示例》处理缺失数据(NaN值)是一个非常常见的问题,本文主要介绍了Pandas统计每行数据中的空值的方法示例,具有一定的参考价值,感兴趣的可以了解一下... 目录什么是空值?为什么要统计空值?准备工作创建示例数据统计每行空值数量进一步分析www.chinasem.cn处

C语言中位操作的实际应用举例

《C语言中位操作的实际应用举例》:本文主要介绍C语言中位操作的实际应用,总结了位操作的使用场景,并指出了需要注意的问题,如可读性、平台依赖性和溢出风险,文中通过代码介绍的非常详细,需要的朋友可以参... 目录1. 嵌入式系统与硬件寄存器操作2. 网络协议解析3. 图像处理与颜色编码4. 高效处理布尔标志集合

如何使用 Python 读取 Excel 数据

《如何使用Python读取Excel数据》:本文主要介绍使用Python读取Excel数据的详细教程,通过pandas和openpyxl,你可以轻松读取Excel文件,并进行各种数据处理操... 目录使用 python 读取 Excel 数据的详细教程1. 安装必要的依赖2. 读取 Excel 文件3. 读

Go语言开发实现查询IP信息的MCP服务器

《Go语言开发实现查询IP信息的MCP服务器》随着MCP的快速普及和广泛应用,MCP服务器也层出不穷,本文将详细介绍如何在Go语言中使用go-mcp库来开发一个查询IP信息的MCP... 目录前言mcp-ip-geo 服务器目录结构说明查询 IP 信息功能实现工具实现工具管理查询单个 IP 信息工具的实现服