黑马程序员技术交流社区

标题: float型和double型的取值 [打印本页]

作者: 欢欢    时间: 2014-2-17 19:51
标题: float型和double型的取值
本帖最后由 欢欢 于 2014-2-17 20:49 编辑

请问 float 型 的取值范围分别用 二进制 和 十六进制 怎么表示?

(2-2[sup]-23[/sup])*2[sup]127[/sup] 是这个样子表示的吗?
1.11111111111111111111111*2[sup]111111[/sup]  对吗?
(注:1.111……和指数1111111均是二进制数)

如果是的话:
种类
符号位
指数位
尾数位
float
第32位(占1bit)
第31-24位(占8bit)
第23-1位(占23bit)
double
第64位(占1bit)
第63-53位(占11bit)
第52-1位(占52bit)

这里的尾数位代表的是纯小数位?(小数点后面的数字)
越搞越糊涂。。。。。。。
求大神指教啊!!!!!!

还有:
double d = 0x123456789;
这里会报错:过大的整数0x123456789,2[sup]1024[/sup]相当于16[sup]256[/sup]
而0x123456789连16[sup]10[/sup]都不到。
难道 double 型数值的整数部分有特别的规定?



作者: 袁梦希    时间: 2014-2-17 20:35
研究的比较深
作者: 李白衣    时间: 2014-2-23 11:30
为了表示浮点数,数被分为两部分:整数部分和小数部分。例如,浮点数14.234就有整数部分14和小数部分0.234.首先把浮点数转换成二进制数,步骤如下:1把整数部分转换成二进制.2把小数部分转换成二进制.3在两部分之间加上小数点.浮点数还可以规范化,浮点数可以用单精度表示法和双精度表示法.规范化只存储这个数的三个部分的信息:符号,指教和尾数.如+1000111.0101规范化后为
+    2^6   *   1.0001110101
符号  指数        尾数
规范化数的单精度表示法如+2^6*1.01000111001解:
由于符号为正,就用0表示.指数是6,在Excess_127表示法中,给指数加上127得到133.用二进制表示,就是10000101.尾数是01000111001.当把位数增加到32位,得到01000111001000000000000.注意不可以漏掉左边的0,因为它是小数.漏掉了那个0就相当于把这个数乘于2.这个数在内存中以32位数存储.如下所示
符号      指数              尾数
0     10000101      01000111001000000000000

另外,float和double类型的范围在Java中是可变的(摘自《head first java》)。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2