java语言中,float类型数字在计算机中用4个字节(32位)来存储。double类型占用8个字节(64位)。 从存储结构和算法上来讲,double和float是一样的,不一样的地方仅仅是float是32位的,double是64位的,所以double能存储更高的精度。

按照IEEE制定的浮点数表示法来进行float,double运算。这种结构是一种科学计数法:用符号、指数和尾数来表示。指数可正可负,所以,IEEE规定,此处算出的次方必须减去127才是真正的指数。底数定为2,即把一个浮点数表示为尾数乘以2的指数次方再添上符号。

下面是具体的规格:

以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在内存中的存储格式是:01000001 10001101 00000000 00000000

如果你觉我写的,对你还有点用,可以关注公众号“微家频道”。

java double 存储_Java语言中:float、double在内存中存储方式相关推荐

  1. 转载——C语言中float,double类型,在内存中的结构(存储方式)

    最近在做一个数据格式分析和转换的项目,第一次接触底层的二进制代码存储,看的一头雾水,看到这个帖子后对于在Windows系统下数据的存储方式有了更多的了解,将原文分享一下: 原文地址为http://ww ...

  2. c语言指数部分尾数部分,C语言中 float double在内存中的存储

    C语言中,对于浮点类型的数据采用单精度类型(float)和双精度类型(double)来存储,float数据占用32bit, double数据占用 64bit,我们在声明一个变量float f= 2.2 ...

  3. C语言中float,double类型,在内存中的结构(存储方式).

    从存储结构和算法上来讲,double和float是一样的,不一样的地方仅仅是float是32位的,double是64位的,所以double能存储更高的精度. 任何数据在内存中都是以二进制(0或1)顺序 ...

  4. C语言中float double等类型在内存中的存储

    问题:十进制数4.5的单精度表示和双精度表示: 备注:   最高位符号位   0表示整数  1表示负数 阶码:  表示的是2的多少次幂这个幂指数 尾数:将其表示成科学计数法之后的舍去科学计数法表示的最 ...

  5. java 线程崩溃_java语言中application异常退出和线程异常崩溃的捕获方法,并且在捕获的钩子方法中进行异常处理...

    1.application应用程序注入自定义钩子程序 java语言本身提供一个很好的Runtime类,可以使我们很好的获取运行时信息.其中有一个方法是 public void addShutdownH ...

  6. java 异常 出口_java语言中,下列哪一子句是异常处理的出口java语言中,下列哪一子句是异常处理的出口Java语言中,下列哪一子句是异常处理的出口()。...

    简述幼儿园选用人员应遵循的原则. 综采工作面上隅角必须要设置瓦斯.氧气传感器,及瓦斯.一氧化碳.氧气便携式报警仪,设置位置为:距顶板小于300mm,距帮大于500mm,距切顶线大于800mm.() 导 ...

  7. int、unsigned int、float、double 和 char 在内存中存储方式

    2017-12-28 创建人:Ruo_Xiao 实验环境:vs2010.Intel 邮箱:xclsoftware@163.com 2018-01-16 修改人:Ruo_Xiao添加对移位存储的说明. ...

  8. c语言中不正确的浮点型常量,c语言中float a=1;对吗?,c语言的问题。float a=1,*b=a,*c=...

    导航:网站首页 > c语言中float a=1:对吗?,c语言的问题.float a=1,*b=&a,*c= c语言中float a=1:对吗?-,c语言的问题.float a=1,*b ...

  9. c语言float怎么表示,c语言中float是如何表示的

    <c语言中float是如何表示的>由会员分享,可在线阅读,更多相关<c语言中float是如何表示的(6页珍藏版)>请在技术文库上搜索. 1.c语言中 FLOAT 是如何表示的 ...

  10. c语言用int取整取了小数_[c语言取整算法]C语言中float型数据怎么取整数部分算法或取小数部分...

    C语言中float型数据怎么 取整数部分算法 或取小数部分 float福n=12.223; int x=(int)n; float y=n-(float)x; C语言有哪些取整函数? C语言有以下几种 ...

最新文章

  1. C++中创建二维数组的几种方法
  2. html 下拉框字体,怎么把select下拉菜单里的文字设置成左右滚动效果
  3. 解决OpenCV问题:OpenCV Error: Assertion failed (!empty()) in cv::CascadeClassifier::detectMultiScale,
  4. 2021年高考成绩查询贵州分数线,2021年贵州省高考分数线
  5. 面向对象程序设计第二次作业(2)
  6. WEG的完整形式是什么?
  7. 合并两个有序数组 java_合并两个有序的数组
  8. iOS开发遇到的坑之五--解决工程已存在plist表,数据却不能存入的问题
  9. 500万数据mysql_mysql 500万数据库
  10. 流量控制Sentinel
  11. php7 返回静态类,PHP7 – 未捕获错误:访问未声明的静态属性
  12. asp 文本转时间_[译]使用LazZiya.ExpressLocalization开发多语言支持的ASP.NET Core 2.x项目...
  13. 基于JWT前后端token认证
  14. angular1的复选框指令--checklistModel
  15. Easy2game使用
  16. 可汗学院公开课——统计学学习:12-34
  17. 融合云信平台对接_java代码
  18. 【题解】UVa1665:Islands
  19. CentOS 7.5系统安装使用Mysql 5.7数据库
  20. DMIPS CPU主频

热门文章

  1. 冬至了,回家羊肉。:)
  2. Gitlab+Jenkins学习之路(四)之gitlab备份和恢复
  3. Oracle 自动生成的视图VM_NSO_1
  4. SpringBoot+Ajax文件上传+FormData表单提交
  5. 【Spring 核心】装配Bean(一) 自动化装配
  6. 2021 年了,TensorFlow 和 PyTorch 两个深度学习框架地位又有什么变化吗?
  7. 一个女算法程序媛的日常
  8. 一份值得收藏的ACL 2020参会笔记:重要论文与NLP领域的发展趋势解读
  9. 【数据集】机器学习数据集汇总(附下载地址)
  10. 百面机器学习—模型复杂度与模型的方差、偏差的关系