0
点赞
收藏
分享

微信扫一扫

Java语言之float、double内存存储方式

是波波呀 2023-07-13 阅读 39
java笔记

目录

前言

Float

 double

三.float和double对比


前言

       本文讲述float、double的浮点型内存存储方式,浮点型存储和整形存储方式不同,所以字节大小或许一样,但是内容含义不一样。而float和double都涉及到精度问题,那么我们先来说说什么是精度!

精度:用科学记数法表示后,小数点能保留几位有效数字。 

例如:11234.2234化成科学记数法,为1.12342234。小数点后有8位,则该精度为8位

浮点型(float和double)在内存中使用科学计数法存储,即一个浮点数有2部分组成:底数m和指数e,而指数e前面还有一位bit位是符号位,即代表了正负。

对了,本文还需要会计算小数的二进制哦


一.Float

 如上图,float虽然占有了4个字节,32位bit位,但内存实际被分成了三部分,首位bit代表了符号位,之后8位代表了指数位,最后23位代表了底数位。

       符号位: 1位,表示负数,0表示正数

  指数位: 8位,表示指数,可表示数据范围(00000000-11111111,对应的十进制为0-255)

 因为指数可以是正数也可以是负数,IEEE754标准规定:指数减去127才是实际的指数(这是规定)

  float的指数表示范围是-127到128;

  底数位:只存储23位,最大值为2^23=8388607(7位数),由于我们输入的是十进制,因此对应十进制数为7位,故该float型的精度为7~8位有效数字(有的编译器为7位,有的为8位)

float精度的展示:


 二.double

       符号位: 1位,表示负数,0表示正数

  指数位: 11位,表示指数,可表示数据范围(00000000000-11111111111,对应的十进制为0-2047)

 因为指数可以是正数也可以是负数,IEEE754标准规定:指数减去1023才是实际的指数(这是规定)

  double的指数表示范围是-1023到1024;

  底数位:只存储52位,最大值为2^52=4503599627370496(16位数),由于我们输入的是十进制,因此对应十进制数为16位,故该double型的精度为16~17位有效数字(有的编译器为16位,有的为17位)


三.float和double对比

(1)在内存中占有的字节数不同

  • 单精度浮点数在机内占4个字节
  • 双精度浮点数在机内占8个字节

(2)有效数字位数不同

  • 单精度浮点数有效数字7/8位
  • 双精度浮点数有效数字16/17位

(3)所能表示数的范围不同

  • 单精度浮点的表示范围:-3.40E+38 ~ +3.40E+38
  • 双精度浮点的表示范围:-1.79E+308 ~ +1.79E+308

(4)在程序中处理速度不同
        一般来说,CPU处理单精度浮点数的速度比处理双精度浮点数快。 

举报

相关推荐

0 条评论