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

C语言进阶【5】---数据在内存中的存储【2】(小数存储很难吗?)

本章概述

  • 本章引要
        • 练习
  • 浮点数的存储
  • 浮点数的取出
  • 小补充
  • 题目解析
  • 彩蛋时刻!!!

本章引要

常见的浮点数:3.1415,1E10等。其中,1E10是科学计数法的形式,它也就等于1*10^10小数数据类型:float ,double ,long double

练习

在开讲本章内容前,大家先来看个代码,大家先猜一下结果:

#define  _CRT_SECURE_NO_WARNINGS	1
#include <stdio.h>
int main()
{int n = 9;float* pFloat = (float*)&n;printf("n的值为:%d\n", n);printf("*pFloat的值为:%f\n", *pFloat);*pFloat = 9.0;printf("n的值为:%d\n", n);printf("*pFloat的值为:%f\n", *pFloat);return 0;
}

结果运行图:在这里插入图片描述
不知道大家猜对多少个答案?最起码要猜对两个答案吧。

浮点数的存储

在上面的代码中,n*pFloat指的是同一个空间里面的数据,但是两者取出来的数据差别很大说明两者的存储和取出数据的方式差别很大,整形的数据存储咱们已经讲过了,现在来讲一下浮点数的存储方式。
根据国际标准IEEE(电气和电子工程协会)754,任意一个二进制浮点数V可以表示成下面的形式:在这里插入图片描述
举个例子:

// 5.5 的二进制表示形式: 101.1
小数点前面: 1*2^2+0*2^1+1*2^0
小数点后面: 1*2^-1
小数就为:1*2^2+0*2^1+1*2^0+1*2^-1
我们知道,2^-1为0.5.
所以,小数点前面都是2的非负整数次方,小数点后面都是负整数次方。

小数存储的格式并不是我们所写的 101.1这个格式,而是按照上面的IEE754标准进行存储的。按照这个标准写的格式为:(-1)0 * 1.011* 22。其实就是个科学计数法的表现形式 。那么,按照上面的标准表示的话,S=0 ,M=1.011 ,E=2。在内存中,我们浮点数存储的有价值的数据就是S ,M和E

  • IEEE754标准规定如下
    • 对于32位的浮点数(32位机器平台),最高的1位存放的是符号位S紧跟着8位存储的是指数位E,再紧跟着的23位存储的有效值M。
    • 对于64位的浮点数(64位机器平台),最高的1位存放的是符号位S,紧跟着11位存储的是指数位E,在紧跟着52位存储的是有效值M。如图所示的存储图:在这里插入图片描述
  • IEEE754标准对E和M有些特殊规定:
    • M的特殊规定:由IEEE754标准规定,1<=M<2,也就是说所有的浮点数有效值位M必须是 1.xxxxxxx。其中 .xxxxx是小数位。IEEE754标准规定,在计算机中,对于有效值位M,只存储小数部分,整数部分的1省略(不进行存储)当读取数据的时候,再把1给加上。这样做,可以扩大小数的存储范围,使存储的精度增高
    • E的特殊规定由IEEE754标准规定的指数E是一个无符号整数(unsigned char类型),因为在浮点数的存储中,只有一个符号位,没有第二个符号位,所以,除了高位1位的符号位,剩下的全是数值位——E为无符号整形。在32位平台下的取值范围为0~255,在64位平台下的取值范围为0 ~2047.但是,我们知道,科学计数法中的指数是有负数的。比如:
0.5 的二进制表示 :0.1
IEEE754标准形式:(-1)^0*1* 2^-1
这个时候指数E就是负数 -1

为了符合科学计数的表现形式IEEE754标准规定,存入内存时,E的真实值必须再加上一个中间数,对于32位平台,这个中间数是127,对于64位平台,这个中间数是1023。比如(32位平台),2^10,E为10,我们存储的是:E+127=137,即10001001.

浮点数的取出

我们存储的是S,E和M,所以我们直接取出这三个值就OK了。然后,再按照IEEE754标准还原为小数,就可以得到我们想要的值了。对于,S和M这俩值的取出没什么特别的,正常取出就OK了,其中,别忘了取出M值的时候加上1.这里最特别的值是E,它的取值就要分三种情况讨论了,如下:

  • E不全为1或不全为0:我们取出E的值后,再减去127(32位平台)或者减去1023(64平台),才能得到真正的指数E(上面讲过了E的存储)。比如,0.5的存储。
0.5的二进制位 :0.1
IEEE745的形式:(-1)^0*1.0*2^-1    s=0 ,m=1.0 ,E=-1+127=126
0 01111110 00000000000000000000000 (小数部分全是0)
  • E全为0:当E的存储全为0的时候,IEEE745规定,原本的E=1-127=-126(32位平台)或E=1-1023(64位平台)。这个时候,有效值M不在加1,这样做是为了表示0或接近0的很小很小的小数。如下所示:。
0 00000000 00100000000000000000000
  • E全为1:这个时候说明这个小数是个很大很大的数。(正负取决于符号位S),如下所示:
0 11111111 0010000000000000000000

小补充

前面,咱们举的小数都是较容易表示二进制的。假如,我们举个较难表示的小数:5.54

5.5还是比较容易表示的 :101.1 
但是,0.04要怎样表示呢?2^-2结果是0.25,比0.04大太多了2^-3结果是0.125 ,比0.04大。………………

从上面的例子中,我想告诉大家的是:浮点数在内存中是无法精确存储的。所以,对于那些较难表示的小数,计算机会在后面多输出几位(或着四舍五入),以便接近你想要的数据

题目解析

上面讲了很多的知识铺垫了,咱们也该回归开头的那个练习题了。。

int n=9;
float *pFloat = (float *)&n;
printf("*pFloat的值为:%f\n",*pFloat);
9的存储: 00000000 00000000 00000000 00001001
当执行到这个代码的时候 printf("*pFloat的值为:%f\n",*pFloat);就会把9的存储格式
当成小数的存储格式(数据类型的意义)S    E            M
即  0 00000000 0000000000000000000100
是E全为0的情况,有效值M不再加1,所以是个接近0的小数,又因为在32位平台下,输出小数点后6位,
所以输出结果:0.000000
//----------------------------------------//
*pFloat = 9.0;printf("num的值为:%d\n",n);9.0的存储格式: 1001.0(-1)^0*1.0010*2^3         E=3+127=130S       E               M0  10000010 00100000000000000000000
执行到这个代码的时候 printf("num的值为:%d\n",n);就会被当成有符号整数(数据类型的意义)
即   01000001 00010000 00000000 00000000 (正整数:原码,反码和补码相同)
输出结果:1091567616

彩蛋时刻!!!


https://www.bilibili.com/video/BV1Zd4y1A7yc/?spm_id_from=333.337.search-card.all.click&vd_source=7d0d6d43e38f977d947fffdf92c1dfad
在这里插入图片描述
每章一句感到累的时候,请抬头看看天空。感谢你能看到这里,点赞+关注+收藏+转发是对我最大的鼓励,咱们下期见!!!

相关文章:

C语言进阶【5】---数据在内存中的存储【2】(小数存储很难吗?)

本章概述 本章引要练习 浮点数的存储浮点数的取出小补充题目解析彩蛋时刻&#xff01;&#xff01;&#xff01; 本章引要 常见的浮点数&#xff1a;3.1415&#xff0c;1E10等。其中&#xff0c;1E10是科学计数法的形式&#xff0c;它也就等于1*10^10。小数数据类型&#xff1…...

如何更新至CDS-Beta下载ERA5数据

数据下载网站 api 更新 api setup 更新api 2024年9月26日起老版的CDS将被停用&#xff0c;会搬迁到CDS-beta上。 创建一个新的CDS-beta账户&#xff0c;也可以使用之前的ECMWF账户。https://cds-beta.climate.copernicus.eu/vi ~/.cdsapirc &#xff0c;登陆https://cds-bet…...

SQL编程题复习(24/9/20)

练习题 x25 10-120 统计每个班级期末成绩的最高分&#xff08;Max&#xff09;&#xff0c;显示班级名称、期末最高成绩10-121 显示没有班导师的班级名称、院系名称10-122 将电子信息1班(班级编号&#xff1a;08)的班主任编号改为李丽清老师的编号&#xff08;PTA题目表述错误&…...

react crash course 2024 (1)理论概念

state的作用 react hooks 而无需写一个class jsx 样式用 spa...

有关JS下隐藏的敏感信息

免责声明&#xff1a;本文仅做分享&#xff01; 目录 JavaScript 介绍 核心组成 工具 FindSomething ** 浏览器检查 ** LinkFinder URLfinder ** SuperSearchPlus ** ffuf ParasCollector waymore Packer Fuzzer JS逆向 应用&#xff1a; 小结&#xff1a; Ja…...

Kafka 基于SASL/SCRAM动态认证部署,kafka加账号密码登录部署

文章目录 前言下载 kafka安装启动zookeeper添加账号密码 启动kafka修改kafka配置文件增加jaas授权文件修改启动文件&#xff0c;启动kafka检查是否部署成功 offset explore 连接 前言 其实挺简单的几个配置文件&#xff0c;问大模型一直没说到点上&#xff0c;绕晕了。SASL/SC…...

富格林:积攒经验阻挠欺诈套路

富格林指出&#xff0c;现货黄金这些年可谓是表现出色&#xff0c;相信上车现货黄金的投资者&#xff0c;都或多或少分得一杯满意的羹。不过话又说回来&#xff0c;不是所有投资者都可以轻松在现货黄金中获利&#xff0c;尤其是对投资小白而言&#xff0c;如果没有积累知识阻挠…...

51单片机-红外遥控器(NEC标准)-实验(红外遥控及调速电机)

作者&#xff1a;Whappy 时间&#xff1a;2024.9.20 总结一下&#xff01;基础实验到这儿里就圆满结束&#xff0c;历经25天&#xff0c;将51单片机学完并亲自手敲代码近5000行&#xff0c;在手敲代码过程中&#xff0c;明显感觉的看和敲&#xff0c;明显就是不同的感觉&…...

云手机的便捷性和安全性体现在哪?

随着5G技术的迅速发展&#xff0c;云手机在游戏、电商以及新媒体营销等领域中的应用日益广泛。它不仅能够显著降低成本、提升效率&#xff0c;还随着边缘计算和云技术的进步&#xff0c;展现出无限的增长潜力。 云手机的便捷性体现在哪里&#xff1f; 云手机的便捷性毋庸置疑。…...

漫谈由标准输入\输出\错误输出引发的思考

标准输入|输出|错误输出 在Unix\Linux体系中&#xff0c;一个进程通常自带有标准输入、标准输出、标准错误输出等三个文件描述符。 如果从对称的观点来看&#xff0c;它确实长的有点奇怪&#xff0c;但它背后隐藏了什么样的知识和道理呢&#xff1f; 从图灵机模型谈起 以前…...

利用 IDEA 快速管理 k8s 集群

简介 前置条件&#xff1a; minikube 已安装&#xff0c;JetBrains k8s 官方插件已安装&#xff0c;Helm 已安装&#xff0c;kubectl 已安装 打开插件面板 检查可执行文件 添加配置文件 添加集群 验证...

【自然语言处理】实验三:新冠病毒的FAQ问答系统

目录 前言 1.新建data_process.py 1.1导入包并定义功能模块1用来读取问题和答案FAQ的文件 1.2功能模块2&#xff1a;进行问题/问题列表处理&#xff08;正则化&#xff0c;分词&#xff09; 1.3功能模块3&#xff1a;处理输入的问题 1.4功能模块4&#xff1a;计算输入问题与问题…...

「C++系列」文件和流

【人工智能教程】&#xff0c;前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。 点击跳转到网站&#xff1a;【人工智能教程】 文章目录 一、文件和流1. 文件操作① 打开文件② 读写文件 2. 流操作 二、应…...

视频美颜SDK核心功能解析:打造高效直播美颜工具方案详解

随着直播行业的迅猛发展&#xff0c;用户对于直播画质和个人形象的要求越来越高。视频美颜SDK作为一项关键技术&#xff0c;已经成为各大直播平台和短视频应用的重要组成部分。通过实时美颜技术&#xff0c;用户能够在直播过程中呈现出更加理想的形象&#xff0c;从而提升直播体…...

深入解析:高性能 SSE 服务器的设计与实现

在当今的实时 Web 应用中&#xff0c;服务器发送事件&#xff08;Server-Sent Events&#xff0c;SSE&#xff09;技术扮演着越来越重要的角色。今天&#xff0c;我们将深入探讨一个用 Go 语言实现的高性能 SSE 服务器的设计和实现细节。这个服务器不仅能够处理大量并发连接&am…...

C#为任意组件开发登录功能的记录

非常简单&#xff0c;直接给出代码&#xff1a; 数据库操作类 这个无需多言就是简单的包含了数据操作的内容&#xff0c;允许你在这一个类中写完关于本地数据库或者云数据库操作的逻辑&#xff0c;与登录逻辑分开哦。 注意&#xff0c;如果你的软件要给别人运行使用&#xf…...

AI免费UI页面生成

https://v0.dev/chat v0 - UI设计 cursor - 编写代码 参考&#xff1a;https://www.youtube.com/watch?vIyIVvAu1KZ4 界面和claude类似&#xff0c;右侧展示效果和代码 https://pagen.so/...

2024新动态:低代码开发占领新常态市场

随着技术的不断进步和数字化转型的加速&#xff0c;企业对于快速开发和部署应用程序的需求日益增长。2024年&#xff0c;低代码开发平台已经成为新常态市场的重要力量&#xff0c;它通过简化应用程序的开发过程&#xff0c;让非技术背景的业务用户也能参与到软件开发中来&#…...

【SQL 用大白话描述事务并发 可能会遇到的问题】及解决策略

在SQL数据库中,当多个事务同时进行时,可能会出现并发事务问题。这些问题通常包括以下几种: 首先,我们要清楚一点,这些问题都是与事务的四大特性之一的隔离性有关。并且通常发生在并发事务场景中。 脏读(Dirty Read): 脏读发生在一个事务读取了另一个事务未提交的数据。…...

nginx安装及vue项目部署

安装及简单配置 在usr/local下建好nginx文件夹&#xff0c;下载好nginx-1.26.2.tar.gz压缩文件.安装编译工具及库文件 yum -y install make zlib zlib-devel gcc-c libtool openssl openssl-devel pcre-devel gcc、gcc-c # 主要用来进行编译相关使用 openssl、ope…...

别再重装系统了!用GParted给Ubuntu 20.04根目录无损扩容(Win11+Ubuntu双系统适用)

双系统用户必备&#xff1a;Ubuntu根目录无损扩容实战指南 1. 当根目录空间告急时 作为一名长期使用Win11Ubuntu双系统的开发者&#xff0c;我深刻理解那种看着根目录空间一点点被蚕食的焦虑。特别是进行深度学习训练或大型项目编译时&#xff0c;几十GB的空间转眼间就被占满。…...

新手福音:在快马平台用自然语言生成你的第一个powershell脚本

今天想和大家分享一个特别适合 PowerShell 新手的入门实践。作为一个从零开始学习 PowerShell 的菜鸟&#xff0c;我发现用自然语言描述需求就能生成可运行的脚本&#xff0c;这个体验真的太友好了。 变量定义与数据结构 刚开始学习时&#xff0c;最基础的就是理解变量和数据结…...

Nuki:多芯片组合,覆盖全场景需求

当下“以家庭为中心”的生活趋势&#xff0c;推动了智能家居需求激增&#xff0c;智能门禁作为家庭安全与便捷的核心&#xff0c;却因传统门锁适配性差、智能锁安装繁琐等问题发展受限&#xff0c;设备制造商亟需能简化无线开发、提升能效且满足安全认证的解决方案&#xff0c;…...

Arduino嵌入式SD卡逐行读取库ReadLines详解

1. 项目概述ReadLines 是一个专为 Arduino 平台设计的轻量级文件行读取库&#xff0c;核心目标是解决嵌入式系统中对 SD 卡文本文件进行逐行解析这一高频但易出错的操作需求。在资源受限的 MCU 环境下&#xff08;如 ESP8266、STM32F103C8T6、ATmega328P&#xff09;&#xff0…...

秒杀系统主库宕机不丢单方案-03-本地消息表

秒杀系统主库宕机不丢单方案&#xff1a;本地消息表&#xff08;事务分离补偿机制&#xff09; 方案概述 本地消息表方案通过在应用层引入消息表机制&#xff0c;将事务操作与消息发送分离&#xff0c;实现最终一致性。该方案是秒杀系统主库宕机不丢单的兜底设计&#xff0c;即…...

3张表搞定财务BP工作!财务BP必须会的3张表

做了这么多年财务数据分析&#xff0c;我发现国内很多公司的财务BP&#xff0c;还停留在自己造表的阶段。每人一套表&#xff0c;格式五花八门&#xff0c;数据口径对不上。结果就是BP花大量时间在拉表、对数的琐事上&#xff0c;真正花在业务分析和决策支持上的时间少之又少。…...

突破Wallpaper Engine资源壁垒:RePKG工具全方位应用指南

突破Wallpaper Engine资源壁垒&#xff1a;RePKG工具全方位应用指南 【免费下载链接】repkg Wallpaper engine PKG extractor/TEX to image converter 项目地址: https://gitcode.com/gh_mirrors/re/repkg 一、RePKG&#xff1a;解锁创意资源的技术钥匙 在数字创意领域…...

3步实现跨平台日历同步:从需求到落地

3步实现跨平台日历同步&#xff1a;从需求到落地 【免费下载链接】ics iCalendar (ics) file generator for node.js 项目地址: https://gitcode.com/gh_mirrors/ic/ics 场景需求&#xff1a;现代日程管理的痛点与解决方案 在数字化办公环境中&#xff0c;日程管理面临…...

500套帐篷发往西非:我们凭什么拿下这单?

一句吐槽&#xff0c;让我们抓住了机会年初&#xff0c;天津京路发科技收到一封西非询盘&#xff1a;500套支架帐篷&#xff0c;用于安置点。客户顺带吐槽了一句&#xff1a;“之前的帐篷&#xff0c;没撑过上一个雨季。”我们懂了——价格不是关键&#xff0c;耐造才是。先看气…...

构建Pixel Couplet Gen的微信小程序:让AI春联触手可及

构建Pixel Couplet Gen的微信小程序&#xff1a;让AI春联触手可及 1. 项目背景与价值 春节贴春联是中国传统文化的重要组成部分&#xff0c;但现代人往往缺乏时间和书法技能来创作个性化春联。Pixel Couplet Gen作为一款AI春联生成模型&#xff0c;能够根据用户输入自动生成像…...