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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 第一印象 中级黑马   /  2013-8-27 09:54  /  2760 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 第一印象 于 2013-8-27 21:35 编辑

在基础课程的视频中,对byte,short,int和long类型的剖析已经非常深入了,但是对float和double类型,我觉得还是有疑惑的地方,比如,
Float 最大值:3.4028235E38
Float 最小值:1.4E-45

Double最大值:1.7976931348623157E308
Double最小值:4.9E-324


在以上四个最值中,这个结果就不是很理解,比如说int类型我们知道是32个二进制位,也就是四个字节,对于byte,short,int类型我们能够很直观
的想象出它在底层存储的原理,以及数据的结构,但是对于float和double类型的结构和原理还是不太了解,有谁能详解一下吗?主要从以下方面:
1.上面四个值中有小数点,是不是代表这是小数呢,如果是的话,就更疑惑了,是的话就是说float的最大值是一个小于4的的值?
2.上面的1.4E-45中,-是减号吗?这么表示是个什么情况?如果是减号的话,为什么没把值算出来呢,比如5-3,直接写2不就完了吗?

评分

参与人数 1技术分 +1 收起 理由
黄文伯 + 1 很给力!

查看全部评分

7 个回复

倒序浏览
亲,如问题已解决请将分类的“未解决”改为“已解决”。
以后的问题贴也要及时更改分类哦~
回复 使用道具 举报
黄文伯 发表于 2013-8-27 10:50
亲,如问题已解决请将分类的“未解决”改为“已解决”。
以后的问题贴也要及时更改分类哦~ ...

好的,谢谢提醒
回复 使用道具 举报
Float 最大值:3.4028235E38
Float 最小值:1.4E-45

Double最大值:1.7976931348623157E308
Double最小值:4.9E-324

1.上述4个数字中是有小数点,但是你没有看明白他的数字表达方式例如3.4028235E38 你看到倒数第3位是字母E,这个E后边的数字就是10的几次方
也就是说这个数字的意思是3.4028235乘以10的38次方。后边数字以此类推。

2.这个-号就是除法的意思,就是说你用4.9除以10的324次方。

评分

参与人数 1技术分 +1 收起 理由
黄文伯 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
本帖最后由 第一印象 于 2013-8-27 12:28 编辑
binghaiwang 发表于 2013-8-27 11:35
Float 最大值:3.4028235E38
Float 最小值:1.4E-45

最大值了解了,但是最小值,Float 最小值:1.4E-45,如果这个写法是1.4除以10的45次方的话,那就是说最小值比0大,因为1.4除以10的45次方是一个正的小数嘛,也就是说float表示的值没有负数,但是我测试了一下,float vf = -1;是没有问题的,这个怎么解释呢?

回复 使用道具 举报
第一印象 发表于 2013-8-27 12:27
最大值了解了,但是最小值,Float 最小值:1.4E-45,如果这个写法是1.4除以10的45次方的话,那就是说最小 ...

以下取自于自己看的书中内容:基本应该就懂了吧。
float 和 double
1. 范围
  float和double的范围是由指数的位数来决定的。
  float的指数位有8位,而double的指数位有11位,分布如下:
  float:
  1bit(符号位) 8bits(指数位) 23bits(尾数位)
  double:
  1bit(符号位) 11bits(指数位) 52bits(尾数位)
  于是,float的指数范围为-127~+128,而double的指数范围为-1023~+1024,并且指数位是按补码的形式来划分的。
  其中负指数决定了浮点数所能表达的绝对值最小的非零数;而正指数决定了浮点数所能表达的绝对值最大的数,也即决定了浮点数的取值范围。
  float的范围为-2^128 ~ +2^128,也即-3.40E+38 ~ +3.40E+38;double的范围为-2^1024 ~ +2^1024,也即-1.79E+308 ~ +1.79E+308。
2.  精度
  float和double的精度是由尾数的位数来决定的。浮点数在内存中是按科学计数法来存储的,其整数部分始终是一个隐含着的“1”,由于它是不变的,故不能对精度造成影响。
  float:2^23 = 8388608,一共七位,这意味着最多能有7位有效数字,但绝对能保证的为6位,也即float的精度为6~7位有效数字;
  double:2^52 = 4503599627370496,一共16位,同理,double的精度为15~16位。
回复 使用道具 举报
binghaiwang 发表于 2013-8-27 12:55
以下取自于自己看的书中内容:基本应该就懂了吧。
float 和 double
1. 范围

配合着API然后再看着你的解释,看了好几遍才算基本了解,非常谢谢你的耐心回答,学到了不少东西,还想问一句,关于float和double类型数据的三部分中,1bit的符号位代表的应该是区分正负的符号吧
回复 使用道具 举报
多上上论坛,收获总会有你意想不到的{:soso_e130:}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马