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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 成都校区 金牌黑马   /  2012-3-6 18:25  /  1751 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

整形的数都是一个直接移位操作的,
比方说 int i=2; i<<2;
float类型的却不能移位操作,  float a=1.0; a<<2;
这个时候a的值就不对了,
为什么float类型的数不能移位操作呢,除了 a*2,还有没有更快捷的方法让float a 快速变成2倍呢?

4 个回复

倒序浏览
位移操作是将数转换成二进制后再位移的吧,二进制只有0和1,而float型的有小数位,都不能将其转换成二进制数,所以无法位移吧
回复 使用道具 举报
       这个说起来比较复杂了,这个浮点型数和整形数值的存储方式。大家知道计算机的数据都保存为2进制数据。整数保存起来非常方便,直接十进制转化为二进制就可以了。但是浮点数(也就是实数)使用二进制保存起来就十分麻烦。有的时候看一个事务的名字就能得到很多信息(这也是很多牛人说的,代码就是最好的注释,好的代码变量命名也很重要)。为什么叫浮点数呢, 点是小数点,浮是浮动的意思。浮动的小数点 这个名字其实正是说明了,浮点数的存储方式。浮点数 的保存方法是,选用一个二进制区段 保存小数,去另一个区段的二进制位,表示小数点的位置如图所示

从网上查了一下
   Java遵循的是IEEE 754 规范。在这个规范里,提到了浮点数的三种类型:单精度、双精度和双精度扩展。
  这三种类型的浮点数的存储都由三部分组成:符号位、指数位和小数位组成,不同的是三者指数位和小数位的位数不一样。
  IEEE 单精度格式具有24 位有效数字精度,并总共占用32 位。IEEE 双精度格式具有53 位有效数字精度,并总共占用64 位。至于双精度扩展,IEEE规定它至少具有64 位有效数字精度,并总共占用至少79 位。

其实说白了,就是 浮点数是按照科学技术法的方式保存的。按照整数的存数方式是不可能的。学习位操作的时候 应该知道 位操作是基于存储格式的,而浮点数的存储格式十分复杂,转换为十进制的计算也同样比较复杂。基于整数存储格式进行的位操作对于浮点数自然也就无效了。

浮点数.JPG (9.35 KB, 下载次数: 35)

浮点数的存储格式

浮点数的存储格式
回复 使用道具 举报
正如楼上的哥们说的,float的存储方式和int不一样,所以我们不能对float类的的数据也使用位运算。
这部分知识我记得在《计算机组成原理》里面有提到过。
回复 使用道具 举报
本帖最后由 段玉超 于 2012-3-7 16:41 编辑
段玉超 发表于 2012-3-6 19:44
这个说起来比较复杂了,这个浮点型数和整形数值的存储方式。大家知道计算机的数据都保存为2进制数据 ...


根据浮点型数据的存储方式,如何计算浮点型的数据的最大最小值呢?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马