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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 胡奎 中级黑马   /  2012-4-25 15:36  /  3488 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

十进制与二八十六进制之间转换方法:
public static void trans(int num,int base,int offset){
  if(num ==0){
   return;
  }
  char[] chs = {'0','1','2','3','4','5','6','7',
    '8','9','A','B','C','D','E','F',};
  char[] arr = new char[32];
  int pos = arr.length;
  while(num!=0){
   int temp = num&base;
   arr[--pos] = chs[temp];
   num = num>>>offset;
  }
  for(int i=pos;i<arr.length;i++){
   System.out.println(arr[i]);
  }
}
方法中的
while(num!=0){
   int temp = num&base;
   arr[--pos] = chs[temp];
   num = num>>>offset;
  }
这段代码什么意思?没看懂?好心人解释下啊?

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

4 个回复

倒序浏览
你去看看视频吧。这一段代码都有解释的。你暗道全部不懂吗
回复 使用道具 举报
while(num!=0)//当num!=0时,执行下面程序
{
   int temp = num&base;//num&base的值赋给temp(转二进制base=1,转八进制base=7,转十六进制base=15)
   arr[--pos] = chs[temp];//将数组chs[]角标为temp的数存到数组arr[]中,pos每次都减1
   num = num>>>offset;//将num右移offset位(转二进制offset=1,八进制offset=3,十六进制offset=4)并重新赋给num
  }

评分

参与人数 2技术分 +1 黑马币 +1 收起 理由
韩新凯 + 1 赞一个!
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
while(num!=0){
   int temp = num&base;//按位与,得出的是转换某进制的其中一位,二进制base是1(0,1),八进制base是7(0,1,2,3,4,5,6,7),十六进制是15(0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F)
   arr[--pos] = chs[temp];//arr数组倒叙存,数组中每个角标的值就是所求数转换成某进制的按正序的每一位某进制的值。方便下面遍历取角标值时按正序去取。chs[temp]是查表法,在转换成16进制时,10-15用A-F表示,方便取值。
   num = num>>>offset;//offset为右移的位数,二进制右移1,八进制右移3,十六进制右移4,此语句为了取下一位某进制的值。所以将已取值的位数右移。
  }
回复 使用道具 举报
如果num==0的话,你的有效位步就全部为0了嘛!那样还需要做移位操作吗?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马