A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 繁华终成泣 中级黑马   /  2013-11-7 15:13  /  3949 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

float范围-3.4E38~3.4E38与double范围-1.7E308~1.7E308中的E代表什么?在百度上别人说是乘以10的多少次方,明显1.7*10(308)double64位是装不下的,求解答啊!

评分

参与人数 1技术分 +1 收起 理由
狼王 + 1

查看全部评分

4 个回复

正序浏览
这个E就是10
回复 使用道具 举报
float和double的范围是由指数的位数来决定的。  float的指数位有8位,而double的指数位有11位,分布如下:  float:  1bit(符号位)  8bits(指数位)  23bits(尾数位)  double:  1bit(符号位)  11bits(指数位)  52bits(尾数位)  于是,float的指数范围为-128~127,而double的指数范围为-1024~1023,并且指数位是按补码的形式来划分的。其中负指数决定了浮点数所能表达的绝对值最小的数;而正指数决定了浮点数所能表达的绝对值最大的数,也即决定了浮点数的取值范围。  float的范围为-2^128 ~ +2^127,也即-3.40E+38 ~ +3.40E+38;double的范围为-2^1024 ~ +2^1023,也即-1.79E+308 ~ +1.79E+308。

评分

参与人数 1技术分 +1 收起 理由
狼王 + 1 赞一个!

查看全部评分

回复 使用道具 举报
可以装下的啊
float的取值范围1.4013E-45~3.4028E+38
用计算器可以算出float的二进制变现形式是
11111111111010101001110111111111 ~ 1100111110110001010110
float占四个字节三十二个二进制位
double的取值范围是4.9E-324~1.7977E+308
1111111111111111111111111111111111111111111111110011111101010100
~
1000100100100111111011100
前边的0省略了

评分

参与人数 1技术分 +1 收起 理由
狼王 + 1

查看全部评分

回复 使用道具 举报
  1. package Demo;

  2. public class Demo12 {

  3.         /**
  4.          * float范围-3.4E38~3.4E38与double范围-1.7E308~1.7E308中的E代表什么?
  5.          * 在百度上别人说是乘以10的多少次方,明显1.7*10(308)double64位是装不下的,求解答啊!
  6.          *
  7.          * E就是代表10的多少次幂,1.7976931348623157E308是可以装下1.7*10(308)double64位的呀!
  8.          */
  9.         public static void main(String[] args) {

  10.                 System.out.println(Float.MAX_VALUE);//3.4028235E38
  11.                 System.out.println(Float.MIN_VALUE);//1.4E-45
  12.                 System.out.println(Float.SIZE);                //32位
  13.                 System.out.println(Double.MAX_VALUE);//1.7976931348623157E308
  14.                 System.out.println(Double.MIN_VALUE);//4.9E-324
  15.                 System.out.println(Double.SIZE);        //64位
  16.                

  17.         }

  18. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
狼王 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马