Java语言中:float、double数据类型在内存中是如何存储的
引用参考
https://www.cnblogs.com/chenmingjun/p/8415464.html#4291528
https://blog.csdn.net/yansmile1/article/details/70145416
java语言中,个字节(32位)来存储。double类型占用8个字节(64位)。 从存储结构和算法上来讲,double和float是一样的,不一样的地方仅仅是float是32位的,double是64位的,所以double能存储更高的精度。
按照IEEE制定的浮点数表示法来进行float,double运算。这种结构是一种科学计数法:用符号、指数和尾数来表示。指数可正可负,所以,IEEE规定,此处算出的次方必须减去127才是真正的指数。底数定为2,即把一个浮点数表示为尾数乘以2的指数次方再添上符号。
下面是具体的规格:
类型 | 符号位 | 指数 | 尾数 | 长度 |
float | 1 | 8 | 23 | 32 |
double | 1 | 11 | 52 | 64 |
以float为例:
因为指数需要减去127,所以float类型的指数可从-126到128。
科学计数法:
格式:
SEEEEEEE EMMMMMMM MMMMMMMM MMMMMMMM
S表示浮点数正负
E表示指数加上127的值后得到的二进制数据
M表示尾数,最高位固定为1
举例:
17.625在内存中的存储为:
首先要把17.625换算成二进制:10001.101。
整数部分:除以2,直到商为0,余数反转。(即:模2取余法)
17 % 2 = 8 ---> 1 低位
8 % 2 = 4 ---> 0
4 % 2 = 2 ---> 0
2 % 2 = 1 ---> 0
1 % 2 = 0 ---> 1 高位
小数部分:乘以2,直到乘位为0,进位顺序取。(即:乘2取整法)
按如下算法进行:
1)首先给小数部分乘2,得到的数,如果小数点前为1;则计1,为0,则计0。
2)再对剩下的小数部分乘2,再计出1或0。
3)重复以上步骤,直至达到需要的精度。
0.625 x 2 = 1.25 ---> 1 -1位
0.25 x 2 = 0.5 ---> 0 -2位
0.5 x 2 = 1.0 ---> 1 -3位
0.0 x 2 = 0.0 ---> 0 -4位
........
以上得到17.625换算成二进制为10001.101。
再将10001.101右移,直到小数点前只剩1位,1.0001101 * 24 ,右移动了四位。
此时,底数和指数就出来了。
底数:因为小数点前必为1,所以IEEE规定只记录小数点后的就好。所以,此处的底数为:0001101
指数:实际为4,必须加上127(转出的时候,减去127),所以为131。也就是10000011
符号:因为是正数,所以是0
综上所述,17.625在内存中的存储格式是:1000001 10001101 00000000 00000000
Java语言中:float、double数据类型在内存中是如何存储的的更多相关文章
- C语言中float,double类型,在内存中的结构(存储方式)
C语言中float,double类型,在内存中的结构(存储方式)从存储结构和算法上来讲,double和float是一样的,不一样的地方仅仅是float是32位的,double是64位的,所以doubl ...
- java中的各种数据类型在内存中存储的方式
原文地址:http://blog.csdn.net/aaa1117a8w5s6d/article/details/8251456 1.Java是如何管理内存的 java的内存管理就是对象的分配和释放问 ...
- 在java语言中int 和 Integer 有什么区别
在java语言中int 和 Integer 有什么区别 解答:int是基本数据类型,Integer是int的包装类,属于引用类型
- 浅谈Java语言中ArrayList和HashSet的区别
Java语言中ArrayList和HashSet的区别 2019-04-10 13:22:49 一.基本区别 首先一起看个实例,其代码如下: package com.MrZ_baby.com; i ...
- 浅谈Java语言中try{}catch{}和finally{}的执行顺序问题
浅谈Java语言中try{}catch{}和finally{}的执行顺序问题 2019-04-06 PM 13:41:46 1. 不管有没有出现异常,finally块中代码都会执行: 2. 当t ...
- java语言中public、private、protected三个关键字的用法,重写和重载的区别。
java语言中public.private.protected三个关键字的用法,重写和重载的区别. 解答: 作用域 当前类 同包 子类 其它 public √ √ √ √ protected √ √ ...
- java语言中Object对象的hashCode()取值的底层算法是怎样实现的
Java语言中,Object对象有个特殊的方法:hashcode(), hashcode()表示的是JVM虚拟机为这个Object对象分配的一个int类型的数值,JVM会使用对象的hashcode值来 ...
- sizeof运算符来获取各种数据类型在内存中所占字节数--gyy整理
C++并没有规定各种数据类型在内存中的存储大小,依赖于不同的编译器的不同而不同,要想获知当前编译器对各种数据类型分配的大小,可以通过sizeof运算符来获取. 使用方法1: sizeof(数据类型) ...
- PC逆向之代码还原技术,第一讲基本数据类型在内存中的表现形式.浮点,指针寻址公式
目录 代码还原技术 一丶简介代码还原 二丶代码还原中的数据类型表现形式 1.整数类型 2.无符号整数 3.有符号整数 4.浮点数数据类型 5.浮点编码 4.Double类型解析. 三丶浮点汇编 1.浮 ...
随机推荐
- 为什么使用Spring Boot
原文:https://dzone.com/articles/why-springboot 作者:Siva Prasad Reddy Katamreddy 译者:Oopsguy 本文将介绍各种 Spri ...
- pwn学习日记Day6 基础知识积累
知识杂项 ELF:在计算机科学中,是一种用于二进制文件.可执行文件.目标代码.共享库和核心转储格式文件. char fgets(char buf, int bufsize, FILE stream); ...
- 以太坊联盟链 parity 节点搭建
https://www.cnblogs.com/sumingk/articles/9097996.html 上一篇文章介绍了以太坊私有链 geth节点的搭建,本篇介绍下企业级应用 联盟链搭建,运用pa ...
- 用jeecg做个项目第二讲(Datagrid数据列表效果详解)
1.列表界面 2.流程状态的效果 <t:dgCol title="流程状态" field="bpmStatus" queryMode="sing ...
- js传值到后台乱码问题
1.前台js的路径 var addurl1="ldcOrderController.do?goods&orderGoodsExtra="+encodeURI(encodeU ...
- 【403】COMP9024 Exercise
Week 1 Exercises fiveDigit.c There is a 5-digit number that satisfies 4 * abcde = edcba, that is,whe ...
- css中em小于1时chrome字体大小和firefox字体大小不一致的问题
css中em设置为0.8,结果页面显示,chrome字体比firefox字体大了不少. chrome有默认字体大小,默认为12px.设置的字体大小小于12px时,也是按照12px来显示. firefo ...
- BSD process name correspondlng to current thread: knernel_task Mac OS version Not yet set
网上查了一大堆,没有一个靠谱的, 百度,以说黑苹果装系统最容易出现这个,这个让我开始怀疑公司给我们的所谓外观的iMac是黑苹果了,因为一直很卡,比上家公司的真黑苹果还卡. 谷歌,有说重置BIOS电池的 ...
- python函数,定义,参数,返回值
python中可以将某些具备一定功能的代码写成一个函数,通过函数可以在一定程度上减少代码的冗余,节约书写代码的时间.因为有一些代码实现的功能我们可能会在很多地方用到. 1.函数的声明与定义 通过def ...
- 使用mybatis的resultMap进行复杂查询
记录下mybatis的集合查询中碰到的问题 https://jaychang.iteye.com/blog/2357143 MyBatis ofType和javaType区别 https: ...