黑马程序员技术交流社区

标题: 毕老师讲那个10进制转16进制的算法,有点没有听明白 [打印本页]

作者: 中华教书人    时间: 2014-9-19 21:56
标题: 毕老师讲那个10进制转16进制的算法,有点没有听明白
各位学过这块的,遇到这样的问题没有?
尤其是
StringBuffer sb = new StringBuffer();
char[] chs ={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};

while(num!=0)
{
      int temp =num & 15;
      sb.apppend([temp]);
      num = num >>>4 ;
}
System.out.println(sb.reverse());
最后结果 3C,不知道这是怎么做到的,老是转不过这个弯。尤其是循环条件为什么是 num!=0;那些空是怎么过滤掉的
请懂的同学,多多指教,先谢过了!


作者: noiary    时间: 2014-9-19 21:59
这是哪里噢... 刚看过StringBuffer表示对这里没印象- -.
作者: Huberry    时间: 2014-9-20 01:49
给你一个数int类型的数,假设60,int类型是32位二进制数,如下

0000 0000 0000 0000 0000 0000 0011 1100

二进制转成16进制,二进制的每四位,转成10进制的一位,只要逐次对二进制的每四位四位转,就可以得到16进制每一位的值

如何获取二进制的每一个四位呢?  用这个数 & 0000 0000 0000 0000 0000 0000 0000 1111(即num & 15)
得到的这个低四位的值就是对应16进制低位的值,存入集合中

每转完一次四位,num就右移四位,准备获取下个四位的值,右移时高位会自动补0:
0000 0000 0000 0000 0000 0000 0000 0011
这时准备获取下一个四位,对应就是16进制的次低位,以此类推

因为右移时高位自动补0,所以最后num的值会变成0,这时就表示有效位都转完了,循环就可以停止了
再把集合中所存的值反序打出来,得到的就是所求的16进制





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