黑马程序员技术交流社区
标题:
两段程序的执行效率
[打印本页]
作者:
范鹏飞
时间:
2013-3-30 00:14
标题:
两段程序的执行效率
本帖最后由 范鹏飞 于 2013-3-30 20:28 编辑
class ToBin03
{
public static void main(String[] args)
{
toBin(60);
System.out.println("Hello World!");
}
public static void toBin(int num)
{
char[] chs = new char[]{'0','1','2','3'
,'4','5','6','7'
,'8','9','A','B'
,'C','D','E','F'};
for (int i=0; i<8; i++)
{
int temp = num & 15;
System.out.print(chs[temp]);
num = num>>>4;
}
}
}
------------------------------------------------
class ToBin01
{
public static void main(String[] args)
{
toBin(1000);
System.out.println("Hello World!");
}
public static void toBin(int num)
{
StringBuffer sb = new StringBuffer();
while (num>0)
{
if (num%16>9)
{
sb.append((char)(num%16-10+'A'));
}else
{
sb.append(num%16);
}
num/=16;
}
System.out.println(sb.reverse());
}
}
复制代码
想问下这段程序在执行效率上有什么区别?好像一般都推荐用第一段程序
作者:
刘海东
时间:
2013-3-30 07:50
我觉得应该是第一个效率高点:
首先,num = num>>>4;的效率肯定高于num/=16;这个是肯定的。
然后,取完余数,下面的程序还有一个判断的过程,而且如果余数大于9小于15,又有一个计算的过程。
而上面那个直接找到数组中对应的元素打印即可。
不过貌似上面那个打印的结果还是反的吧?
作者:
HM谢文辉
时间:
2013-3-30 08:17
第一个在时间效率高,空间效率低,多开辟了一个数组空间,但是少些判断,与运算和移位也比除和取余快。
作者:
HM马明宇
时间:
2013-3-30 08:46
第一个的效率高,位移运算的效率肯定要高一些,而且第一个的for虚幻里也没有判断
作者:
何衍其
时间:
2013-3-30 10:12
这两段程序使用现有的输入条件:ToBin03.toBin(60)和ToBin01.toBin(1000)不容易测试效率。
第一它俩迭代的次数都很小。
第二ToBin03是固定执行8次迭代,而ToBin01的迭代次数是随输入的参数决定。
从效率相关的知识点看:都说num=num>>>4比num/=16的执行效率高,位移运算比除运算有更少机器语言操作次数。呵呵也我没有具体测试过。
这两段代码的共同点是:输出16进制符号的字符串。我想它们的本意是讲解操作符的运用,以及我们对代码逻辑的走读能力(即对输出结果的预判)
作者:
陈丽莉
时间:
2013-3-30 13:27
还有问题的话继续追问~ 么有了就将帖子分类改成【已解决】~
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2