黑马程序员技术交流社区
标题:
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位(占
1
bit)
第31-24位(占
8
bit)
第23-1位(占
23
bit)
double
第64位(占
1
bit)
第63-53位(占
11
bit)
第52-1位(占
52
bit)
这里的尾数位代表的是纯小数位?(小数点后面的数字)
越搞越糊涂。。。。。。。
求大神指教啊!!!!!!
还有:
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