今天我们来谈谈Java中的float和double在计算机中是如何存储的。都知道int和float在Java中所占的字节数都是4字节,但是int只能存储整数型,float不仅能储存浮点型,存储范围也比整数大,既然同样的字节数为什么会有不同的效果呢?

是因为float和double类型在计算机中的存储结构和算法跟int型不一致。采用的存储方式是:

S * (2 ^ E)* M

其中S表示符号位,占一个字节;

E表示阶数;

M表示位数;

在float中S占1bit,E占8bit,M占23bit,

在double中S占1bit,E占11bit,M占52bit,double能够表示的范围大,所以常常float叫单精度,double叫双精度。

下面详细讲解下这种数据结构是怎么存储数据的:

在十进制当中,一个数可以这样表示:

123 = 1.23 * 10 ^ (2),

那么同理,在二进制的世界一样也可以这么表示,例如:

101001 = 1.01001 * 2 ^ (5),

对应到上面符号,S = + ,没写表示默认是正数,在计算机中存储为0,1.01001表示M,在计算机中存储为101001,由于这里整数部分的1始终不变,所以可节约出来,这样M的精度范围就增加了一位。

指数部分5,对应符号E,在计算机中存储数字位 5+127 = 132,二进制码为10000100,这里我要着重说一下为甚么指数部分的表示为什么要加127,我开始也很不明白,导致我一直记不住。

因为阶数部分是8,但不包含首位符号位,所以对于计算机判断来说这8位就是个无符号整数,表示范围0~255,但是实际中我们的阶数部分是需要负数的,去掉全0表示负无穷,全1表示正无穷,所以剩下的部分就是1~254,为了公平各一半,所以要加上127,1~127的范围表示负数,例如E = -5,所以在计算机中表示为-5 + 127 = 122,当E = 5时,计算机中保存的是5 + 127 = 132,我想这么说应该很清楚了。

所以总结上面1.01001在计算机中的存储值是

010000100 00000000000000000101001。

double类型就不详细介绍了,因为除了表示的范围不一样外,存储的数据结构和算法和float完全一致。

举个栗子

由于浮点型引发的重大事故,火箭爆炸事件,就是由于将64位浮点型强转为16位整型,由于存储方式都完全不同,所以结果和想象的不一致引发了巨大的损失和不可挽回的局面,所以对于浮点型之间的引用和转换要更加引起我们的警惕。

更多干货内容请关注公众号:计算机基础爱好者

16 bit float 存储_浅谈float和double相关推荐

  1. python float 精度_浅谈Python里面小数点精度的控制

    要求较小的精度 round()内置方法 这个是使用最多的,刚看了round()的使用解释,也不是很容易懂.round()不是简单的四舍五入的处理方式. For the built-in types s ...

  2. S50非接触式IC卡存储控制浅谈(M1)

    文章分为三章来讲解. 第一章 基本原理及结构,公开资料,已阅读过的可以跳过 第二章 为自己整理后的浅谈 一.S50存储结构及扇区.块原理 M1 卡分为 16 个扇区,每个扇区由 4 块(块 0.块 1 ...

  3. 《计算机辅助教学及应用实践研究》,《论文_浅谈计算机辅助教学(定稿)》

    <论文_浅谈计算机辅助教学(定稿)> (3页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 9.9 积分 摘要:计算机辅助教学中要用到多媒体课件 ...

  4. python判断两个对象是否为相等使用的运算符是_Python入门_浅谈逻辑判断与运算符...

    这是关于Python的第6篇文章,主要介绍下逻辑判断与运算符. (一) 逻辑判断: 如果要实现一个复杂的功能程序,逻辑判断必不可少.逻辑判断的最基本标准:布尔类型. 布尔类型只有两个值:True和Fa ...

  5. 16 bit float 存储_小数在内存中是如何存储的,揭秘诺贝尔奖级别的设计(长篇神文)...

    小数在内存中是以浮点数的形式存储的.浮点数并不是一种数值分类,它和整数.小数.实数等不是一个层面的概念.浮点数是数字(或者说数值)在内存中的一种存储格式,它和定点数是相对的.C语言使用定点数格式来存储 ...

  6. python中内置的四种数值类型为_浅谈python语言四种数值类型

    Python语言支持四种不同的数值类型,包括int(整数)long(长整数)float(浮点实际值)complex (复数),本文章向码农介绍python 四种数值类型,需要的朋友可以参考一下.希望对 ...

  7. python 读excel字符型 数值_浅谈python 读excel数值为浮点型的问题

    浅谈python 读excel数值为浮点型的问题 如下所示: #读入no data = xlrd.open_workbook("no.xlsx") #打开excel table = ...

  8. java程序的装载与检查_浅谈Java类型装载、连接与初始化

    类型装载.连接与初始化 Java虚拟机通过装载.连接和初始化一个Java类型,使该类型可以被正在运行的Java程序所使用.其中装载就是把二进制形式的Java class文件读入Java虚拟机中去;连接 ...

  9. python sys模块作用_浅谈Python中的模块

    模块 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少,很多编程语言都采用这种组织代码的方式.在Python中,一个.py文件就称之为一个模块(Mod ...

最新文章

  1. Spring Boot+Gradle+ MyBatisPlus3.x搭建企业级的后台分离框架
  2. QIIME 2用户文档. 9数据导入Importing data(2019.7)
  3. 聚美优品 html 资源,跨界整合行业资源 聚美优品向阳而生
  4. 自己收藏的symantec 需要的拿走
  5. 查询去重_【Freya的MySQL课堂】DQL基础查询
  6. 【mysql】left join on and 和 where的区别
  7. QQ春节福袋正式上线 解锁春节红包新姿势
  8. session与cookie之间的关系
  9. 4g网络标准 计算机网络,4G网络是什么 4G LET是什么?
  10. 高斯列主消元法 求非齐次线性方程组 C语言实现代码
  11. P3390 【模板】矩阵快速幂
  12. 无限乱斗连接服务器失败,LOL新版无限乱斗模式服务器挤爆怎么办 客户端哪些功能被限制...
  13. 中国医科大学2021年12月《五官科护理学》作业考核试题
  14. FCKEDITOR编辑器的使用
  15. OCR识别之LEADTOOLS介绍
  16. 关于Invariance Matters: Exemplar Memory for Domain Adaptive Person Re-identification 论文理解
  17. HTTP Status 505 – HTTP Version Not Supported
  18. ssm-诗词网站系统的设计与实现毕业设计(附源码、运行环境)
  19. 波士顿大学计算机科学研究生,波士顿大学计算机科学硕士申请要求是什么?
  20. 品读张爱玲的一生的“母女劫”

热门文章

  1. 第二十七篇 导航栏和内容块
  2. 数据挖掘_wget整站下载
  3. C++的类为什么要用指针
  4. linux 窗口不能移动的替换命令
  5. 200个最常见的JAVA面试问题(附答案)
  6. MSP430程序库二UART异步串口
  7. SVG与CSS的特殊性
  8. 大一python期末考试选择题_python大一题目
  9. 传递HTML字符串virtual,理解Virtual DOM(1) 真实DOM和虚拟DOM的映射
  10. linux配置内存buffer,Linux中内存buffer和cache的区别