黑马程序员技术交流社区

标题: 练习:高效的算出 2*8 = 2<<3;不知道我理解的对不对,求解... [打印本页]

作者: king2042    时间: 2014-3-3 18:16
标题: 练习:高效的算出 2*8 = 2<<3;不知道我理解的对不对,求解...
练习:高效的算出 2*8 = 2<<3;这道练习题的这么写对吗?

~G@V0V%5N(`NNQI~QX6LH(7.jpg (41.85 KB, 下载次数: 106)

不知道理解的对不

不知道理解的对不

作者: l939    时间: 2014-3-3 19:34
额。。。楼主。。这样看吧:
十进制8的二进制:1000,位移就是乘以或者处以2的次幕。。
2*8-->2<<3:位移3次可以看成是2*2*2=8....就是2*8.。。。而且它是直接就在2的二进制:10后面加上3个0:10000:转成十进制就是16,高效~~
而2*8.。。。可以看成:   1000
                                       *0010    这样得计算多次。。效率就低了。。。
作者: 乔青山    时间: 2014-3-3 19:47
。。。。。位运算自然更高效,这个和2*8==2<<3有什么关系。。。
高效的算出2*8
那就System.out.ptintln(2<<3);不就完了么- -
作者: king2042    时间: 2014-3-3 19:56
乔青山 发表于 2014-3-3 19:47
。。。。。位运算自然更高效,这个和2*8==2

我知道位运算效率高,但是你看一下练习题的题目是:高效的算出 2*8 = 2<<3;而不是高效的算出 2*8;很不解;
作者: 乔青山    时间: 2014-3-3 20:07
king2042 发表于 2014-3-3 19:56
我知道位运算效率高,但是你看一下练习题的题目是:高效的算出 2*8 = 2

。。。。高效算出2*8=2<<3.。。。。?好吧,求练习题截图  - - 这个题好让人纠结
作者: king2042    时间: 2014-3-3 20:12
乔青山 发表于 2014-3-3 20:07
。。。。高效算出2*8=2

练习:高效的算出 2*8 = 2<<3;
作者: king2042    时间: 2014-3-3 20:13
king2042 发表于 2014-3-3 20:12
练习:高效的算出 2*8 = 2

就这个了这是在毕老师Java基础总结中的一个
作者: 乔青山    时间: 2014-3-3 20:14
king2042 发表于 2014-3-3 20:12
练习:高效的算出 2*8 = 2

.....不会,感觉就是判断,怎么高效真不知道
作者: king2042    时间: 2014-3-3 20:17
乔青山 发表于 2014-3-3 20:14
.....不会,感觉就是判断,怎么高效真不知道

哦,那就按你跟我说的那个意思了。。。高效算出2*8,后面应该是给出的答案;
谢谢你的耐心解答
作者: osully    时间: 2014-3-3 20:39
就算是数据很大
16777215*16777215  或者16777215<<23
这个计算对于现在的电脑来说 还真心是可以忽略.......
我循环了一千万次......都是3毫秒.....


  1. public class Test {
  2.         public static void main(String[] args) {
  3.                 long l1 = System.currentTimeMillis();
  4.                 show1();
  5.                 long l2= System.currentTimeMillis();
  6.                 sop(l2-l1);
  7.                
  8.         }
  9.         public static void show1(){
  10.                 for (int i = 0; i < 10000000; i++) {
  11.                         long n=16777215*16777215;
  12.                 }

  13.         }
  14.         public static void show2(){
  15.                 int j=0;
  16.                 for (int i = 0; i < 10000000; i++) {
  17.                         j++;
  18.                         long n=16777215<<23;
  19.                 }
  20.         }
  21.         public static void sop(Object obj) {
  22.                 System.out.println(obj);
  23.         }
  24. }
复制代码





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2