相信大多数和我一样,在学到位移运算的时候,都回去被位移运算的简洁所折服。尤其是当老师讲到2乘以8的最快捷算法时,如果不是刚学了位移运算,很难想到还有“2<<3"这样的算法。下面两道题本人就试着用位移运算来处理,一道处理成功了,一道处理结果不对,不知道为什么?是不是位移运算只能处理整数?
珠穆朗玛峰高8848m,设一张纸的厚度0.01m,纸张折叠几次能够达到此高度? 第一种方法:用的就是位移: - for(int x=1;x<32;x++){//由于1在int型,因此x最大可以左移32位 .
- if((1<<x)>884900){
- System.out.println(x);
- break;
- }
- }
复制代码
第二种方法: - int start =1;
- int end=884900;
- int count=0;
- while(start<end){
- start*=2;
- count++;
- }
- System.out.println(count);
复制代码上面这道题就体现除了位移运算的便捷性。昨天晚上做了一道阳哥的题目,发现这道题目也可以用位移来做题目如下: 第二题: 一个球从100米高处落下,第一次反弹回50米高,第二次反弹为第一次反弹高度的一半,求第十次反弹的高度。 第一种方法,传统的算法: - double s=100/Math.pow(2,10);
复制代码第二种方法,位移算法:
|