黑马程序员技术交流社区

标题: 菜鸟求助 [打印本页]

作者: My_work    时间: 2014-3-3 17:18
标题: 菜鸟求助
本帖最后由 My_work 于 2014-3-3 19:57 编辑
  1. public static int getResult(int num1, int num2)  
  2.     {  
  3.             
  4.         int result = 0;  
  5.         for(int i = 0; i < num2 ; i++)  
  6.         {  
  7.             result += num1;  
  8.         }  
  9.         
  10.         return result;  
  11.     }  
  12.    
复制代码
  1.   
  2.     public static int getResult_2(int num1, int num2)  
  3.     {  
  4.         int times = 0;  
  5.         int result2 = 0;
  6.         while(num2 != 1)  
  7.         {  
  8.             num2 = num2 >> 1;  
  9.             times++;  
  10.         }  
  11.         result2 = num1 << times;  
  12.         return result2;  
  13.     }  
复制代码
的效率哪个要高一些??

作者: 乔青山    时间: 2014-3-3 18:06
你这个方法是算num1+num1+num1+。。num1 一直加num2次?
我觉得你这两种的效率都低的吓人。。。你直接return num1*num2;可能效率要高一点。。
作者: My_work    时间: 2014-3-3 19:32
乔青山 发表于 2014-3-3 18:06
你这个方法是算num1+num1+num1+。。num1 一直加num2次?
我觉得你这两种的效率都低的吓人。。。你直接retur ...

做的测试题上问3x8的效率高的计算方式,我从网上查的这个,一个加法,一个位运算,我还是不明白怎么比较它们的效率
作者: 乔青山    时间: 2014-3-3 19:45
My_work 发表于 2014-3-3 19:32
做的测试题上问3x8的效率高的计算方式,我从网上查的这个,一个加法,一个位运算,我还是不明白怎么比较 ...

你这个题的意思就是问你,3*8和3<<3哪个更效率
效率高的那就是3<<3了呗,不需要写个方法。。而且方法也写的挺麻烦,那就很难看出来效率了
作者: My_work    时间: 2014-3-3 19:57
乔青山 发表于 2014-3-3 19:45
你这个题的意思就是问你,3*8和3

谢谢啦,我以为都要用代码证明呢
作者: 吴涛    时间: 2014-3-3 20:10
本帖最后由 吴涛 于 2014-3-3 20:15 编辑

如果这个程序只是想看看,关于乘法的实现,效率较高的方式的话,不妨,这样想:乘法是基于加法实现的,计算机做乘法,也是像我们算一样,在加法基础上实现乘法,而关于位移,计算机是二进制的,对位的操作,很容易实现,一般我们做加法,里面的数,计算机没有十进制,操作起来二进制应该是最方便的




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