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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

各位学过这块的,遇到这样的问题没有?
尤其是
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;那些空是怎么过滤掉的
请懂的同学,多多指教,先谢过了!

2 个回复

正序浏览
给你一个数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进制
回复 使用道具 举报
这是哪里噢... 刚看过StringBuffer表示对这里没印象- -.
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马