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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 欢欢 高级黑马   /  2014-2-17 19:51  /  1043 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 欢欢 于 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 型数值的整数部分有特别的规定?


评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

2 个回复

倒序浏览
研究的比较深
回复 使用道具 举报
为了表示浮点数,数被分为两部分:整数部分和小数部分。例如,浮点数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》)。

评分

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

查看全部评分

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