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

news2025/1/15 20:49:57

文章目录

  • 前言
  • 一、浮点型在内存中的存储
  • 二、浮点数存储规则
  • 三、浮点数在内存中的存储(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 01100000000000000000000
	E 的部分不全为0 或不全为1
- 取出数据时:
	S 不变 S = 0
	E 由存入的计算值减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.0
	printf("*pFloat的值为: %f\n", *pFloat);// 0.000000
	*pFloat = 9.0;
	printf("num的值为: %d\n", n); // 1091567616
	printf("*pFloat的值为: %f\n", *pFloat); // 9.000000

	return 0;
}

总结

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1628674.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Golang基础1-基本类型、if、switch、string

基本类型 bool 整数&#xff1a;byte(相当于uint8), rune(相当于int32), int/uint ,int8/uint8 ,int16/uint16 ,int32/uint32 ,int64/uint64 浮点数: float32 ,float64, complex64 ,complex128 array&#xff08;值类型&#xff09;、slice、map、chan&#xff08;引用类型…

前期Hadoop学习总结

前期Hadoop学习总结 1.Linux&#xff1a;操作系统 ​ 2.虚拟机&#xff1a;主机 3.SecureCRT &#xff08;客户端&#xff09;&#xff1a;连接Linux 方便操作 4.Hadoop&#xff1a;软件 这个软件要装在Linux里面 5.Hadoop是干嘛的&#xff1a; Hadoop是一个开源的分布式计…

【LLMOps】小白详细教程,在Dify中创建并使用自定义工具

文章目录 博客详细讲解视频点击查看高清脑图 1. 搭建天气查询http服务1.1. flask代码1.2. 接口优化方法 2. 生成openapi json schema2.1. 测试接口2.2. 生成openapi schema 3. 在dify中创建自定义工具3.1. 导入schema3.2. 设置工具认证信息3.3. 测试工具 4. 调用工具4.1. Agent…

Apache Seata的可观测实践

title: Seata的可观测实践 keywords: [Seata、分布式事务、数据一致性、微服务、可观测] description: 本文介绍Seata在可观测领域的探索和实践 author: 刘戎-Seata 本文来自 Apache Seata官方文档&#xff0c;欢迎访问官网&#xff0c;查看更多深度文章。 Seata简介 Seata的…

matplotlib 安装失败:Failed building wheel for matplotlib 解决方案

Python | Failed building wheel for matplotlib 朋友遇到 python 安装 matplotlib 时的问题&#xff0c;笔者帮忙远程调试(踩了不少坑)。网上的解决方案有很多无效&#xff0c;以此来记录以下个人解决方案。 在使用指令 pip install matplotlib出现如下报错&#xff1a; “…

机器学习理论基础—集成学习(1)

机器学习理论基础—集成学习 个体与集成 集成学习通过构建并结合多个学习器来完成学习任务&#xff0c;有时也称为多分类系统等。 分类&#xff1a; 根据集成学习中的个体学习器的不同可以分为同质集成&#xff08;集成的学习器相同例如全部是决策树&#xff09;&#xff0c…

目标检测——农作物杂草数据集

引言 亲爱的读者们&#xff0c;您是否在寻找某个特定的数据集&#xff0c;用于研究或项目实践&#xff1f;欢迎您在评论区留言&#xff0c;或者通过公众号私信告诉我&#xff0c;您想要的数据集的类型主题。小编会竭尽全力为您寻找&#xff0c;并在找到后第一时间与您分享。 …

centos 安装配置文件中心 nacos2.2.3 稳定版

安装mysql 8 参考文章 centos7搭建mysql5.6 && mysql 8.0_centos7 mysql5.6-CSDN博客 安装 jdk 17 官网下载 对应的版本 Java Downloads | Oracle wget https://download.java.net/java/GA/jdk17.0.2/dfd4a8d0985749f896bed50d7138ee7f/8/GPL/openjdk-17.0.2_l…

15(第十四章,大数据和数据科学)

目录 概述 基本概念 数据仓库/传统商务智能与数据科学的比较 数据科学的过程 大数据 大数据来源 数据湖 机器学习 监督学习 无监督学习 强化学习 扩展 1、数据仓库&#xff08;Data Warehouse&#xff09; 2、数据湖(Data Lake) 3、大数据平台1.0 4、数据中台 …

Visual Studio中怎样更改Nuget程序包源

场景 Visual Studio 2019 在使用NuGet添加依赖包时&#xff0c;在预览中搜索不到程序包。 排查下NuGet的程序包源为本地。 将程序包源修改下。 实现 在解决方案上右击选择管理解决方案中的NuGet程序包(在 Visual Studio 中打开“工具”>“选项”>“NuGet 包管理器”…

vim 插件01:插件管理神器pathogen

1、pathogen简介 Vim 插件 pathogen 是一款历史比较悠久的 Vim 插件管理器。Pathogen 的主要功能是提供一种模块化的方式来管理和加载 Vim 插件。说人话&#xff1a;vim是一款管理各类插件的插卡&#xff0c;使用它会让插件的安装和使用非常方便。 以下是 Pathogen 的主要特点…

高级STM32应用开发:使用HAL库和RTOS

引言 STM32系列微控制器以其高性能、丰富的外设支持和低功耗特性&#xff0c;在工业、汽车及消费电子市场中占有显著地位。 下面我们旨在探讨STM32的高级开发技术&#xff0c;包括硬件抽象层&#xff08;HAL&#xff09;库的使用和实时操作系统&#xff08;RTOS&#xff09;的…

python之excel加工处理小案例一则

一、工具用途 工作中&#xff0c;需要对各类excel进行加工处理&#xff0c;当表和字段比较多时&#xff0c;关联条件又有多个&#xff0c;每次通过execl的vlookup之类的关联公式手工可以解决工作需求&#xff0c;但一般耗时较长&#xff0c;且人工统计匹配也存在出错的情况。 …

Kafka学习笔记01【2024最新版】

一、Kafka-课程介绍 官网地址&#xff1a;Apache KafkaApache Kafka: A Distributed Streaming Platform.https://kafka.apache.org/ kafka 3.6.1版本&#xff0c;作为经典分布式订阅、发布的消息传输中间件&#xff0c;kafka在实时数据处理、消息队列、流处理等领域具有广泛…

利用yakit实现csrf (lucy争夺最帅男银的csrf之旅)

前言 欢迎来到我的博客 个人主页:北岭敲键盘的荒漠猫-CSDN博客 csrf原理:【web安全】CSRF漏洞攻击与防御-CSDN博客 文章主要内容提炼 本文主要讲利用yakit实现csrf的过程。 用pikachu靶场和内网环境做案例。 如需漏洞原理请点击上面原理的导航。 &#xff08;因为我觉得yak…

RFID技术引领3C手机镜头模组产线智能化转型

RFID技术引领3C手机镜头模组产线智能化转型 应用背景 随着智能手机市场的快速发展与技术创新&#xff0c;手机镜头模组作为影像功能的核心组件&#xff0c;其生产精度、效率及供应链管理的重要性日益凸显。面对复杂多变的市场需求、严格的品质要求以及激烈的市场竞争&#xf…

01.JAVAEE初阶之计算机如何工作

1.一台机器如何组成 冯诺依曼体系 CPU 中央处理器: 进行算术运算和逻辑判断.存储器: 分为外存和内存, 用于存储数据(使用二进制方式存储)输入设备: 用户给计算机发号施令的设备.输出设备: 计算机个用户汇报结果的设备. 针对存储空间 硬盘 > 内存 >> CPU针对数据访问…

NodeJs[黑马笔记简洁版]

是什么 怎么用 模块 模块化标准 CommonJs(标准语法)默认 ECMAscript 内置模块 fs模块 path模块 http模块 自定义模块 第三方包 包概念 npm 包管理器 总结

Vue 使用Canvas画布手写电子版签名 保存 上传服务端

电子版签名效果 定义画布 <canvas width"500"height"250"ref"cn"mousedown"cnMouseDown"mousemove"cnMouseMove"mouseup"cnMouseUp"style"width:500px;height: 250px;background-color:snow;padding: 10p…

Nginx:高性能Web服务器与反向代理的卓越之选

目录 一、Nginx概述 二、Nginx的特点 三、Nginx架构图 四、Nginx优势 五、正向代理与反向代理 正向代理&#xff1a; 反向代理&#xff1a; 一、Nginx概述 Nginx&#xff08;engine x&#xff09;是一个由俄罗斯人Igor Sysoev开发的高性能HTTP和反向代理服务器。其历史背…