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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 范鹏飞 中级黑马   /  2013-3-30 00:14  /  1601 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 范鹏飞 于 2013-3-30 20:28 编辑
  1. class ToBin03
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 toBin(60);
  6.                 System.out.println("Hello World!");
  7.         }
  8.         public static void toBin(int num)
  9.         {
  10.                 char[] chs = new char[]{'0','1','2','3'
  11.                                                 ,'4','5','6','7'
  12.                                                 ,'8','9','A','B'
  13.                                                 ,'C','D','E','F'};
  14.                 for (int i=0; i<8; i++)
  15.                 {
  16.                         int temp = num & 15;
  17.                         System.out.print(chs[temp]);
  18.                         num = num>>>4;
  19.                 }
  20.         }
  21. }
  22. ------------------------------------------------
  23. class ToBin01
  24. {
  25.         public static void main(String[] args)
  26.         {
  27.                 toBin(1000);
  28.                 System.out.println("Hello World!");
  29.         }
  30.         public static void toBin(int num)
  31.         {
  32.                 StringBuffer sb = new StringBuffer();
  33.                 while (num>0)
  34.                 {
  35.                         if (num%16>9)
  36.                         {
  37.                                 sb.append((char)(num%16-10+'A'));
  38.                         }else
  39.                         {
  40.                                 sb.append(num%16);
  41.                         }
  42.                         num/=16;
  43.                 }
  44.                 System.out.println(sb.reverse());
  45.         }
  46. }
复制代码
想问下这段程序在执行效率上有什么区别?好像一般都推荐用第一段程序

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1 新人加油

查看全部评分

5 个回复

倒序浏览
我觉得应该是第一个效率高点:
首先,num = num>>>4;的效率肯定高于num/=16;这个是肯定的。
然后,取完余数,下面的程序还有一个判断的过程,而且如果余数大于9小于15,又有一个计算的过程。
而上面那个直接找到数组中对应的元素打印即可。
不过貌似上面那个打印的结果还是反的吧?

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
第一个在时间效率高,空间效率低,多开辟了一个数组空间,但是少些判断,与运算和移位也比除和取余快。

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
第一个的效率高,位移运算的效率肯定要高一些,而且第一个的for虚幻里也没有判断

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
这两段程序使用现有的输入条件:ToBin03.toBin(60)和ToBin01.toBin(1000)不容易测试效率。
第一它俩迭代的次数都很小。
第二ToBin03是固定执行8次迭代,而ToBin01的迭代次数是随输入的参数决定。

从效率相关的知识点看:都说num=num>>>4比num/=16的执行效率高,位移运算比除运算有更少机器语言操作次数。呵呵也我没有具体测试过。

这两段代码的共同点是:输出16进制符号的字符串。我想它们的本意是讲解操作符的运用,以及我们对代码逻辑的走读能力(即对输出结果的预判)

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
还有问题的话继续追问~  么有了就将帖子分类改成【已解决】~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马