黑马程序员技术交流社区
标题:
转16进制问题
[打印本页]
作者:
彭刚
时间:
2013-12-4 11:39
标题:
转16进制问题
为什么结果多个0、、、
class arr
{
public static void main(String[] args)
{
toHex_1(60);
}
public static void toHex_1(int num)
{
//进制转换10--16
StringBuffer sb = new StringBuffer();
int temp=1;
while(temp!=0)
{
//System.out.println(num&15);
temp = num&15;
if(temp>9)
sb.append((char)(temp-10+'a'));
else
sb.append(temp);
num = num>>>4;
}
System.out.println(sb.reverse());
}
}
作者:
天ya~_琼楼
时间:
2013-12-4 12:28
在while循环时,判断temp!=0,判断的是上次循环得到的temp,因此符合条件可以再循环一次,但是这次循环得出的temp=0,然后终止循环,打印结果。
比如60&15,转化为二进制
0000-0000 0000-0000 0000-0000 0011-1100
&0000-0000 0000-0000 0000-0000 0000-1111
得出结果为1111,temp不为0,即c,继续循环
然后60>>4,再&15
0000-0000 0000-0000 0000-0000 0000-0011
&0000-0000 0000-0000 0000-0000 0000-1111
结果0011,不为0,即3,继续循环
再右移4位,&15,
0000-0000 0000-0000 0000-0000 0000-0000
&0000-0000 0000-0000 0000-0000 0000-1111
结果为0,停止循环,打印结果,此时结果里已经有个0了
我们判断temp为0停止循环,应该判断其前边为0就停止,修改代码如下:
class arr
{
public static void main(String[] args)
{
toHex_1(60);
}
public static void toHex_1(int num)
{
//进制转换10--16
StringBuffer sb = new StringBuffer();
int temp=1;
while(temp!=0)
{
//System.out.println(num&15);
temp = num&15;
if(temp==0)//增加此处,判断为0,立马跳出循环,不能让0进入结果
break;
if(temp>9)
sb.append((char)(temp-10+'a'));
else
sb.append(temp);
num = num>>>4;
}
System.out.println(sb.reverse());
}
}
复制代码
作者:
李文帅
时间:
2013-12-4 12:31
楼主程序多运行了一次循环
第一次循环:temp = num&15 = 12;---> sb.append('c'); --->num = num>>>4 = 3
然后判断temp不等于零,进入下次循环
第二次循环:temp = num&15 = 3;---> sb.append(3); --->num = num>>>4 = 0
然后判断temp不等于零,进入下次循环
第三次循环:temp = num&15 = 0;---> sb.append(0); --->num = num>>>4 = 0
然后判断temp等于0,结束循环,所以最终sb = "c30"所以反转后会多一个0
这是我自己洗的代码:
public static void toHex_1(int num){
//进制转换10--16
StringBuffer sb = new StringBuffer();
int temp=num&15;//初始化
while(temp!=0){
if(temp>9){
sb.append((char)(temp-10+'a'));
}else{
sb.append(temp);
}
num = num>>>4;
temp = num&15;
}
System.out.println(sb);
}
复制代码
作者:
简★零度
时间:
2013-12-5 22:54
下次问题解决了就把类型改成提问结束!谢谢!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2