黑马程序员技术交流社区

标题: 十进制与二八十六进制之间转换问题 [打印本页]

作者: 胡奎    时间: 2012-4-25 15:36
标题: 十进制与二八十六进制之间转换问题
十进制与二八十六进制之间转换方法:
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;
  }
这段代码什么意思?没看懂?好心人解释下啊?
作者: 邱俊杰    时间: 2012-4-25 16:18
你去看看视频吧。这一段代码都有解释的。你暗道全部不懂吗
作者: 马浩    时间: 2012-4-25 16:19
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
  }

作者: 魏征    时间: 2012-4-25 17:45
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,此语句为了取下一位某进制的值。所以将已取值的位数右移。
  }

作者: 黄或俊    时间: 2012-4-25 17:48
如果num==0的话,你的有效位步就全部为0了嘛!那样还需要做移位操作吗?





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