【C语言技能树】浮点数在内存中的存储

news2024/10/2 22:17:59

Halo,这里是Ppeua。平时主要更新C语言,C++,数据结构算法......感兴趣就关注我吧!你定不会失望。

 

🌈个人主页:主页链接

🌈算法专栏:专栏链接

     我会一直往里填充内容哒!

🌈LeetCode专栏:专栏链接 

    目前在刷初级算法的LeetBook 。若每日一题当中有力所能及的题目,也会当天做完发出

🌈代码仓库:Gitee链接

🌈点击关注=收获更多优质内容🌈

近期在复习计算机组成原理,刚好看到了浮点数存储,想起许久之前,就学过了,于是乎记录一下

目录

浮点数存储例子:

内存中的存储:

数据取出:

例子:

完结撒花:


浮点数存储例子:

int main()
{
    int n = 9;
    float *pFloat = (float *)&n;
    printf("n的值为:%d\n",n);
    printf("*pFloat的值为:%f\n",*pFloat);
    *pFloat = 9.0;
    printf("num的值为:%d\n",n);
    printf("*pFloat的值为:%f\n",*pFloat);
    return 0;
}

这里执行完的结果是啥呢?相信没看过相关内容前都各有各的答案,咱暂且按下不表. 接下来看看浮点数在内存中如何存储的

内存中的存储:

由于所有数在机器中都是以二进制的方式进行存储.如果是整形就很简单了,是多少就存多少.

这里以5举例,在二进制中为 101

那浮点数如何存储呢?

这里以5.5举例,他的二进制码为 101.1,前面很好理解,就是照搬5的存储方式

那后面呢?我们知道在整形里最低位为2^0,那么在浮点数中下一位自然是2^(-1),2^(-2)...依此类推

好的 我们知道了5.5的二进制码为101.1,这里将101.1转换为科学计数法就是1.011*2^(-2)

那么符号是啥呢,正号!那么就这样存储 (-1)^0*1.011*2^(-2)

让我们来观察下这组数据的存储格式,发现

有表式符号的 0(负数)或1(正数) 有表式有效数字的1.011 有表示数位的 -2

在浮点数中:称符号位为S,数位为E,有效数字为M

注:绿色为64位(double精度 以下为float类型举例

符号位存储使用1个bit大小 这很好理解,0为正数1为负数

有效数字使用23个bit大小 因为有效数字为1.xxxxx所以我们舍去1的存储,仅在内存中存入xxxx在取出的时候再加入1即可

数位使用8bit大小,因为E中存在有符号情况,而为了表示的数字更多,我们不使用第一位作为符号位的情况,将数据+127后进行存储(如上面的-2 我们存入内存中为125)

数据取出:

了解完了如何存储,那如何取出呢

如上方5.5的例子:

在内存中存储为 10000001 01100000000000000000000000000000

在16进制中表示为 40 B0 00 00

将这个数据取出,

符号位S直接取出,为0

M也直接取出后在前面直接写上1.即可

E就有点麻烦了:

        分为三种情况 第一种情况不为全一或者全零则讲该数据直接-127取出即可

                               第二种情况为全一,此时为2^8=256-1=255 哪怕减去127也为2^128 有点太大了,所以我们直接将这种情况写为无穷(正负仍看符号位)

                                第三种情况为全0,此时1-127=-128 ,2^-128太小了,无穷小,所以我们直接补上符号位,也不再写1.x而是直接写上0.x

例子:

所以开头的例子输出应该为:

9

第二个变为浮点数存储

000000000000000000001001 此时E为0 变为无穷小 所以输出为0.00000

第三个结果在内存中以浮点数存储 输出9.0

但第四以整数的形式去读取浮点数存储

所以 9.0=1001=(-1)^0*1.001*2^(3)

10000010 00100000000000000000000000000000

所以输出的结果为10104000000000

完结撒花:

🌈本篇博客的内容【浮点数在内存中的存储】已经结束。

🌈若对你有些许帮助,可以点赞、关注、评论支持下博主,你的支持将是我前进路上最大的动力。

🌈若以上内容有任何问题,欢迎在评论区指出。若对以上内容有任何不解,都可私信评论询问。

🌈诸君,山顶见!

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

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

相关文章

CSDN每日一练:小豚鼠搬家

题目名称:小豚鼠搬家 时间限制:1000ms内存限制:256M 题目描述 小豚鼠排排坐。 小艺酱买了一排排格子的小房子n*m,她想让k只小豚鼠每只小豚鼠都有自己的房子。 但是为了不浪费空间,她想要小房子的最外圈尽量每行每列都有…

TCP/IP网络编程——多种 I/O 函数

完整版文章请参考: TCP/IP网络编程完整版文章 文章目录第 13 章 多种 I/O 函数13.1 send & recv 函数13.1.1 Linux 中的 send & recv13.1.2 MSG_OOB:发送紧急消息13.1.3 紧急模式工作原理13.1.4 检查输入缓冲13.2 readv & writev 函数13.2.1…

深入探讨软件定义架构及其意义

在上期文章中,我们了解了现代GNSS模拟中的软件定义架构,并与传统架构进行了对比,本期文章中我们将继续深入探讨软件定义架构及其意义。所谓软件定义架构,其实是用软件去定义系统的功能,用软件给硬件赋能,最…

07 分布式事务Seata使用(2)

1、Seata是什么 Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。AT模式是阿里首推的模式,阿里云上有商用版本的GTS&#x…

win10 安装 vs2015(社区版本)以及opencv-4.5.5

一、下载vs2015以及opencv-4.5.5从https://msdn.itellyou.cn/ 网站下载vs2015(社区版本)从https://opencv.org/releases/网站下载opencv-4.5.5二、安装vs2015和opencv-4.5.5解压后双击exe安装文件,完成安装(默认)双击下…

9.Docker Swarm

Docker Swarm 基本概念 Swarm是使用SwarmKit构建的 Docker 引擎内置(原生)的集群管理和编排工具。Docker Swarm是 Docker 官方三剑客项目之一,提供 Docker 容器集群服务,是 Docker 官方对容器云生态进行支持的核心方案。 使用它…

【大数据clickhouse】clickhouse 常用查询优化策略详解

一、前言 在上一篇我们分享了clickhouse的常用的语法规则优化策略,这些优化规则更多属于引擎自带的优化策略,开发过程中只需尽量遵守即可,然而,在开发过程中,使用clickhouse更多将面临各种查询sql的编写甚至复杂sql的…

PHP(13)HTTP协议

PHP(13)HTTP协议一、HTTP请求1. 请求行2. 请求头3. 请求体二、HTTP响应1. 响应行2. 响应头三、设置HTTP响应四、模拟HTTP请求一、HTTP请求 1. 请求行 请求行独占一行。形式:请求方式 资源路径 协议版本号 GET /index.php HTTP/1.1 2. 请求…

vue3:直接修改reative的值,页面却不响应,这是什么情况?

目录 前言 错误示范: 解决办法: 1.使用ref 2.reative多套一层 3.使用Object.assign 前言: 今天看到有人在提问,问题是这样的,我修改了reative的值,数据居然失去了响应性,页面毫无变化&…

Linux多进程开发

一、进程概述 1、程序和进程 程序是包含一系列信息的文件,这些信息描述了如何在运行时创建一个进程: 二进制格式标识:每个程序文件都包含用于描述可执行文件格式的元信息。内核利用此信息来解释文件中的其他信息。(ELF可执行连…

vue项目第五天

历史记录组件触发 连带menu组件路由同步修改菜单 默认激活的路由。历史记录路由如果当前路由在最后一个位置,删除则自动向前移位。解决第一个小bug,点击tab高亮之后路由不跳点击最后一个tab删除,修改了menuid,同步路由跳转点击删除…

2023年企业如何改善员工体验?为什么员工体验很重要?

什么是员工体验?大约 96% 的企业领导者表示,专注于员工体验可以更轻松地留住顶尖人才。[1] 这还不是全部。令人震惊的是,87%的企业领导者还表示,优先考虑员工的幸福感将给他们带来竞争优势。尽管有这些发现,但只有19%的…

redis五大IO网络模型、内存回收

目录1.0用户空间和内核态空间1.1 网络模型-阻塞IO1.2 网络模型-非阻塞IO1.3 网络模型-IO多路复用1.3.1 网络模型-IO多路复用-select方式1.3.2 网络模型-IO多路复用模型-poll模式1.3.3 网络模型-IO多路复用模型-epoll函数1.3.4 网络模型-epoll中的ET和LT1.3.5 网络模型-基于epol…

Hadoop高可用搭建(二)

目录 解压Hadoop 改名 更改配置文件 workers hdfs-site.xml core-site.xml hadoop-env.sh mapred-site.xml yarn-site.xml 设置环境变量 启动集群 启动zk集群 启动journalnode服务 格式化hfds namenode 启动namenode 同步namenode信息 查看namenode节点状态 …

三维重建小有基础入门之特征点检测基础

前言:本文将从此篇开始,记录自己从普通CVer入门三维重建的学习过程,可能过程比较坎坷,都在摸索阶段,但争取每次学习都能进一步,提高自己的能力,同时,每篇文章都会按情况相应地推出B站…

一文搞懂core-scheduling核心机制

cookie的原理借助于unsigned long型,和refcount_t引用计数器。 32位64位char *4字节8字节unsigned long4字节8字节 数据结构修改 首先看看实现core scheduling功能对数据结构有哪些修改 task_struct struct task_struct{struct rb_node core_node;unsigned long…

Downie4.6.7

Downie是Mac下一个简单的下载管理器,可以让您快速将不同的视频网站上的视频下载并保存到电脑磁盘里然后使用您的默认媒体播放器观看它们,文章末尾附下载地址。主要特点支持许多网站目前支持超过1,000个不同的网站(包括YouTube,Vim…

06 OpenCV‘阈值处理、自适应处理与ostu方法

1 基本概念 CV2中使用阈值的作用是将灰度图像二值化,即将灰度图像的像素值根据一个设定的阈值分成黑白两部分。阈值处理可以用于图像分割、去除噪声、增强图像对比度等多个领域。例如,在物体检测和跟踪中,可以通过对图像进行阈值处理来提取目…

回收站清空了还能找回来吗?回收站恢复的4个方法(最全)

回收站作为一个数据回收的地方,可以保存已删除的文件很久,直到用户手动永久删除这些数据,这为用户避免了许多数据丢失的问题。但是回收站数据过多,难免会影响电脑的运行速度。为此,我们都会定期进行清理。 清理过程中…

LeetCode 92. 反转链表 II

原题链接 难度&#xff1a;middle\color{orange}{middle}middle 题目描述 给你单链表的头指针 headheadhead 和两个整数 leftleftleft 和 rightrightright &#xff0c;其中 left<rightleft < rightleft<right 。请你反转从位置 leftleftleft 到位置 rightrightrig…