浮点型在内存中的存储

news/2024/5/19 6:40:53/文章来源:https://blog.csdn.net/challenglistic/article/details/127351177

        目录

1、浮点数的存储方式

(1) 转化为二进制

(2) 转化为国际标准形式

(3) 使用国际标准形式存储

(4) 存储方式验证

2、从内存中取出浮点数需满足的规则

(1) E 不全为0 或 不全为1

(2) E 全为 0 

(3) E 全为 1


浮点数在内存中存储的方式和整型不一样。所以我们在存储的时候,尽量避免把整型保存为浮点型或者 浮点型保存为整型。

1、浮点数的存储方式

下面通过两个浮点数来了解浮点数的存储过程,这两个浮点数仅仅是比较方便介绍。

(1) 转化为二进制

整数位 5 转化为二进制就是 101

小数位 0.5,化为二进制就是0.1

  • 十进制里,0.1表示的是 1/10;0.01表示的是 1/100
  • 类似的,二进制里,0.1表示的是 1/2;0.01表示的是 1/4

因此,5.5 转化为二进制就是 101.1

(2) 转化为国际标准形式

根据国际标准IEEE(电气和电子工程协会)754,任意一个二进制浮点数V可以表示成下面的形式:

  • (-1)^S * M * 2 ^ E
  • (-1)^S 表示符号位,当s=0,V为正数;当s=1,V为负数。
  • M表示有效数字,1 ≤ M < 2.(M 是一个二进制小数,终归还是二进制,必须小于2)
  • 2^E表示指数位。 

101.1 使用二进制科学计数法的形式,可以写成 1.011 * 2^2(现在是二进制,所以底数要换成2,而不是10)。因为5.5是一个正数,所以最终可以写成

(-1)^0 * 1.011 * 2^2

此时 S = 0

        M = 1.011

        E = 2

 因此,浮点数就使用S、M、E来存储

(3) 使用国际标准形式存储

单精度可以理解成 float类型,双精度可以理解成 double类型

 

================= S = 0 =================

S 可以直接存入,存入S的值是 0

================= E = 2 =================

E 是 8位,如果将第一位作为符号位,取值范围会小很多;但是如果无符号位,E可以是负数,这样的话就无法表示E。因此,IEEE 754规定,E在存入之前必须要加上一个中间数,如果是单精度,就加上127;如果是双精度,就加上1023

所以 实际存入E 的值是 2+127 = 129 = 1000 0001

================= M = 1.011 =================

在第二点说明 M 的时候,有提到一句话,1 ≤ M < 2。由于 M 是二进制(除了1就是0),所以M的整数位一般都是 1,存一个确定的比特位进去,只是占用空间。因此,IEEE 754规定,M仅存小数位进去。

所以实际存入 M 的值是 001,由于M有23位,缺省部分默认补 0 。

综上,实际存入的浮点数的二进制形式是 

0 10000001 01100000000000000000000

转换成十六进制就是

40 B0 00 00

 

(4) 存储方式验证

下面我们使用VS来验证在内存中的存储方式是否如上所说

这里的VS使用的是小端存储,左边是低地址,右边是高地址

所以写成我们熟悉的形式就是 40 b0 00 00

2、从内存中取出浮点数需满足的规则

S 可以直接取出来,M 取出来的时候需要加上最开始的整数位 1。

但是E 取出的来的时候,就需要分情况了,因为存入的时候,不能保证一定是以浮点数的形式存入,如果是以整型的方式存入,E是什么,我们也无从得知。

(1) E 不全为0 或 不全为1

这个时候就属于一般情况,直接使用取出来的 E 减去127或者1023,实际看取出来的时候,是以单精度还是以双精度取出来。

(2) E 全为 0 

此时如果按照正常取法,那就是 -127,这个时候就会变成

± 1.xxxxxx * 2^(-127)

这种情况下得到的浮点数几乎接近 0 ,因此我们返回的结果为

0.00000000...000

(3) E 全为 1

如果按照正常取法,那就是 127,这个时候就会变成

± 1.xxxxxx * 2^(127)

这种情况下的浮点数要么是正无穷,要么是负无穷。

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2022/10语音识别大作业:基于HMM(隐马尔可夫模型)的Matlab孤立数字语音识别

别看了你要找的就在这。csdn上所有这方面的资源都是收费的,而且没有直接能用的好的,我的也是基于重金买来的两份结合起来做了三天的大修之后才能运行。所以这也不是一份免费分享。但是本文解决了其他资源没有解决的问题,所以50是一个公道的价…

C++——程序员的逼格神器-github

github的重要性: 网络时代的程序员必备。 github的作用: 版本管理多人协作开源共享 常用方案: gitTortoiseGitgithub [Tortoise,程序员常称其为小乌龟,小海龟] 安装配置步骤 1.注册 GitHub: Where the world bui…

JVM之对象的内存模型、创建过程、对象引用、生命周期

JVM之对象的内存模型、创建过程、对象引用、生命周期Java对象内存模型对象头实例数据对齐填充部分对象的创建类加载检查分配内存初始化零值设置对象头执行init方法引用计数法对象的引用强引用软引用弱引用虚引用对象的生命周期创建阶段(Created)应用阶段(In Use)不可见阶段(Inv…

代理ARP (路由式代理ARP+vlan内代理ARP+vlan间代理ARP) [理论+实验验证]

衷心感谢三位大佬的博客 ! ! ! ! 这篇博客主要是为了记录笔记方便查看而整理, 主要内容整理来源: (58条消息) 代理ARP实验_在下小黄的博客-CSDN博客_arp代理实验 (58条消息) 代理ARP_士别三日wyx的博客-CSDN博客_arp代理 (59条消息) 华为ARP代理的三种方…

字节在职三年,如何想要三个月内将软件测试学好,我建议你这样学

目录 13年本科毕业,目前已经工作将近7年时间,第一段工作是在字节工作3年时间,目前是再另外一家大厂工作。今天跟大家分享一下我工作的心得,希望对你有所帮助 我对软件测试的理解 软件测试是软件开发的最后一道防线,…

【Vue 快速入门系列】样式绑定与条件渲染

文章目录前言样式绑定条件渲染前言 在vue中好像一切数据都是可以动态的,那么我们应如何让dom元素中的样式动起来呢?我们既然可以改变dom元素的样式,我们能不能将其隐藏起来呢?今天将会介绍到Vue中如何将属性与dom元素的样式进行绑…

Java List 扩容机制探究(ArrayList 、Vector、LinkedList)

文章目录List扩容ArrayList 扩容机制结论:无参构造创建的ArrayList的初始空间为0,在添加第一个元素的时候空间会默认为10,之后扩容会为当前容量的1.5倍。0->10->15->22->33->49源码分析1.ArrayList list new ArrayList();2. …

Android多媒体架构

Android多媒体架构 要实现我们的媒体播放器 主要使用的就是android media MediaPlayer 这样的一个类 来为我们的播放器的实现提供一个主要功能 而这个类的实现又依赖于 JNI层的 1)一些接口 2)Libmedia.so 库 (这个库才是 mediaplayer类的真正实现) 再往下就是我们的se…

产品能力|书山有路-趣味算法(第二版)读书笔记part1

系列文章目录 趣味算法(第二版)读书笔记: day1: 序章|学习的方法和目标. day2:算法之美|打开算法之门与算法复杂性 day3.算法之美|函数特性与图形 day4.数学之美|斐波那契数列 后续补充完善 提示:写完文章后,目录可以…

Kubernetes_16_静态Pod网关apiserver的audit审计日志

系列文章目录 文章目录系列文章目录前言一、理论:kube-apiserver的审计日志1.1 kube-apiserver.yaml 文件的五行修改1.2 audit-policy.yaml文件的修改二、实践:编写策略文件,打印想要的审计日志2.1 步骤1:编写修改policy.yaml文件…

05_排序与分页

1.排序数据 1.1排序规则 如果没有使用排序操作,默认情况下查询返回的数据是按照添加数据的顺序显示的。 使用ORDER BY子句排序 ASC (ascend):升序 DESC (descend):降序 ORDER BY子句在SELECT语句的结尾。 1.2单列排序 1.简单使用排序 #如果没有使用排序操作&am…

每日算法、面试题

目录 2022/10/16 一、算法 翻转字符串里的单词 找出字符串中第一个匹配项的下标 二、面试题 SpringMvc中如何解决POST请求的中文乱码问题 SpringMvc的工作流程 2022/10/16 一、算法 翻转字符串里的单词 给你一个字符串 s ,请你反转字符串中 单词 的顺序。 …

【Nginx】三、Nginx实现四层负载均衡Nginx实现限流防盗链流量镜像

Nginx实现四层负载均衡一、Nginx实现四层负载均衡1、四层负载均衡与七层负载均衡区别2、Nginx四层负载均衡配置3、SocketTool工具4、TCP&UDPDebug工具二、Nginx实现限流三、Nginx实现防盗链四、Nginx流量镜像一、Nginx实现四层负载均衡 我们之前介绍的HTTP负载均衡&#x…

Silane-PEG-Alkyne,硅烷-聚乙二醇-炔基用于修饰蛋白类

An English name:Silane-PEG-Alkyne Chinese name:硅烷-聚乙二醇-炔基 Item no:X-GF-0314-10k CAS:N/A Formula:N/A MW:Silane-PEG-Alkyne5000、Silane-PEG-Alkyne3400、Silane-PEG-Alkyne2000、硅烷-…

【附源码】计算机毕业设计SSM美食菜谱网站

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

(附源码)计算机毕业设计SSM基于JAVA线上订餐系统

(附源码)计算机毕业设计SSM基于JAVA线上订餐系统 项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术…

【Vue Router】

资料 官网:https://v3.router.vuejs.org/zh/guide/ 尚硅谷视频:https://www.bilibili.com/video/BV1Zy4y1K7SH?p118 基本使用 安装: 这里安装vue3.x vue 2.x 版本对应 vue-router 3.xvue 3.x 版本对应 vue-router 4.x其他以此类推 npm…

【数据结构】------ 堆

目录 堆的概念及结构 堆的实现 堆向上调整算法 堆向下调整算法 堆的创建 堆的初始化和销毁 堆的插入 堆的删除 获取堆顶的数据 获取堆的数据个数 堆的判空 TopK问题(在N个数找出最大(小)的前K个) 堆排序 堆的概念及…

自学Python第二十七天- 简单部署生产环境,docker 的使用

自学Python第二十七天- 部署极简生产环境Windows 环境部署创建绿色 python 环境Linux 环境部署创建 Linux 环境使用Hyper-V使用 VMware 部署使用 docker 部署docker 原理安装 docker使用 linux 系统使用包管理工具使用 docker 仓库使用源代码安装使用 windows 系统开启 docker …

寻路算法-从bfs到Astart

一、简单BFS算法 bfs即广度优先搜索,最基础的寻路算法 即向出发点向四周无目的扩散,知道到达终点或者无法扩散为止 # coding: utf-8import random import bisectclass Solution(object):def __init__(self, n, m, bad):self.map [[0, 0, 0, 0, 0, 0, …