黑马程序员技术交流社区
标题:
关于查表法-十进制转16进制 -代码的一点小问题
[打印本页]
作者:
会说话的木头
时间:
2014-3-7 17:05
标题:
关于查表法-十进制转16进制 -代码的一点小问题
class chabiaofa
{
public static void main(String[] args)
{
toHex(-60);
}
public static void toHex(int num)
{
char[] chs = {'o','1','2','3',
'4','5','6','7',
'8','9','A','B',
'C','D','E','F'};
char [] arr = new char [8];
int pos = arr.length;
while (num!=0)
{
int temp = num &15;
//System.out.println(chs[temp]);
arr[--pos]= chs[temp];
num = num>>4;
}
for (int x=pos;x<arr.length ;x++ )
{
System.out.print(arr[x]+",");
}
}
}
复制代码
输入60 没问题,但是输入-60,编译通过,但是结果报错!如图所见!
QQ截图20140307170419.png
(2.22 KB, 下载次数: 81)
下载附件
2014-3-7 17:04 上传
作者:
nicholyx
时间:
2014-3-7 18:48
用无符号右移
num = num>>4;// 应该改成num = num>>>4;
作者:
Zero霖
时间:
2014-3-7 18:53
本帖最后由 Zero霖 于 2014-3-7 18:59 编辑
num=num>>>4,“>>>”表示无符号右移,而“>>”表示右移,单纯的右移时二进制码最高位会一直补1,这样循环就停不下来,pos减到负值数组下标是没有负值的,自然就报错了。
作者:
榨菜
时间:
2014-3-7 18:57
本帖最后由 榨菜 于 2014-3-7 19:00 编辑
>>右移 如果最高位0,右移后,用0补空位。
如果最高位1,右移后,用1补空位。
>>> 无论最高位是什么,右移后,都用0补。
-60 ---> FFFFFFFFFFFFFFC4
作者:
MVP
时间:
2014-3-8 10:43
把 num = num>>4 改成 num = num>>>4;因为负数的最高位是1,所以>>移位的时候会不断的补1,不断循环,所以报错.
作者:
一诺千金
时间:
2014-3-8 11:41
>>换成>>> >>高位是什么补什么,负数>>最后全补的11111111,>>>高位无论是什么不得全是00000000
要&运算的,有符号右移就不行了
作者:
小脚印
时间:
2014-3-8 11:47
在26行 数据移位时,应为num>>>4 用无符号右移
而非>>带符号右移
作者:
syw02014
时间:
2014-3-8 11:54
给你三种转换的方法(num=num>>>4,“>>>”表示无符号右移,而“>>”表示右移),希望能帮到你:
class ArrayTestToHex
{
public static void main(String[] args)
{
System.out.println("输入一个要转成16进制的数:");
Scanner in = new Scanner(System.in);
int num=in.nextInt();
System.out.println("第一种方法:");
toHex(num);
System.out.println("第二种方法:");
toHex_1(num);
System.out.println("第三种方法:");
toHex_2(num);
}
public static void toHex(int num)
{
if(num==0)
{
System.out.println("0");
return ;
}
char[] chs = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
char[] arr = new char[8];
int pos = arr.length;
while(num!=0)
{
int temp = num&15;
arr[--pos] = chs[temp];
num = num >>> 4;
}
System.out.println("pos="+pos);
for(int x=pos ;x<arr.length; x++)
System.out.print(arr[x]);
}
public static void toHex_1(int num)
{
char[] chs = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
for(int x=0 ; x<8; x++)
{
int temp = num & 15;
System.out.print(chs[temp]);
num = num >>> 4;
}
}
public static void toHex_2(int num)
{
for(int x=0; x<8; x++)
{
int temp = num & 15;
if(temp>9)
System.out.print((char)(temp-10+'A'));
else
System.out.print(temp);
num = num >>> 4;
}
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2