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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© xiaguangcheng 中级黑马   /  2014-11-16 10:12  /  2150 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

相信大多数和我一样,在学到位移运算的时候,都回去被位移运算的简洁所折服。尤其是当老师讲到2乘以8的最快捷算法时,如果不是刚学了位移运算,很难想到还有“2<<3"这样的算法。下面两道题本人就试着用位移运算来处理,一道处理成功了,一道处理结果不对,不知道为什么?是不是位移运算只能处理整数?
珠穆朗玛峰高8848m,设一张纸的厚度0.01m,纸张折叠几次能够达到此高度?
第一种方法:用的就是位移:
  1. for(int x=1;x<32;x++){//由于1在int型,因此x最大可以左移32位   .
  2.                             if((1<<x)>884900){                     
  3.                                      System.out.println(x);
  4.                                      break;
  5.                             }
  6.                    }
复制代码

第二种方法:
  1. int start =1;
  2.                             int end=884900;
  3.                             int count=0;
  4.                             while(start<end){
  5.                                      start*=2;
  6.                                      count++;
  7. }
  8.                             System.out.println(count);
复制代码
上面这道题就体现除了位移运算的便捷性。昨天晚上做了一道阳哥的题目,发现这道题目也可以用位移来做题目如下:
第二题:
一个球从100米高处落下,第一次反弹回50米高,第二次反弹为第一次反弹高度的一半,求第十次反弹的高度。
第一种方法,传统的算法:
  1. double s=100/Math.pow(2,10);
复制代码
第二种方法,位移算法:
  1. double s=100>>10;
复制代码
第二种算法结果不对,不知道为什么?求大神指教?



评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1

查看全部评分

7 个回复

倒序浏览
浮点数的二进制表示方法与整数的二进制表示方法差别很大,所以,浮点数不建议使用位移计算。
回复 使用道具 举报
OCTSJimmy 发表于 2014-11-16 10:19
浮点数的二进制表示方法与整数的二进制表示方法差别很大,所以,浮点数不建议使用位移计算。 ...

谢谢,那如果想用位移该怎么办呢?
回复 使用道具 举报
刚刚查了下资料,貌似不少语言的位移操作都是针对整型而言的,因此在做位移时,系统自动强制转化为了整数……
实在想对浮点位移,那就可以先将小数变为整数,接着位移后再变回去,可是这就违背了楼主需要简化操作的初衷了……

暂时没法子……

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1

查看全部评分

回复 使用道具 举报 1 0
本帖最后由 奋斗的蜗牛ksd 于 2014-11-17 00:25 编辑

位移的本质是 底层 二进制数字的运算,每次运算的结果,都默认取整,浮点数二进制 运算很复杂的,有局限性

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1

查看全部评分

回复 使用道具 举报
如果非要用位移,把浮点型改成整形试试看。但是误差会很大的。位移是有局限的。
回复 使用道具 举报
奋斗的蜗牛ksd 发表于 2014-11-17 00:19
位移的本质是 底层 二进制数字的运算,每次运算的结果,都默认取整,浮点数二进制 运算很复杂的,有局限性 ...

谢谢了,大致了解了,位移运算处理小数貌似很紧张
回复 使用道具 举报
xiaguangcheng 发表于 2014-11-17 20:30
谢谢了,大致了解了,位移运算处理小数貌似很紧张

不客气。 记住 简洁得总会有局限的,什么与什么不可兼得!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马