今天看了视频,用制表转换进制,方法蛮简单,为了自己习惯,我编写的程序和老毕的有点点同,在转换正数时候都OK,负数时候就有错误。dos错误显示如下:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1
at Change.toBin_2(Change.java:100)
at Change.main(Change.java:5)
我的程序如下:
public static void toBin_2(int num)
{
//制表
char[] chs={'0','1'};
//定义一个临时数组
char[] arr=new char[32];
int pos=arr.length-1; 此处我将指针初始就在最高位,视频中是定义的pos=arr,length;
while(num!=0)
{
{
int temp = num&1;
arr[pos--] = chs[temp]; 视频中是arr[--pos]
num = num>>>1;
}
}
//将存储好的数据遍历打印出来
for (int x=pos;x<arr.length ;x++ )
{
System.out.print(arr[x]);
}
}
和视频中只有红色两个地方不同,其他都是一样的。运行正数都没有问题,负数就不行了,十六进制同理也是这种现象。我觉得负数补码就是取反+1,但是位数应该还是32吧,为什么初始arr.length-1就不对了呢?谢谢大家解疑。作者: 李晓俊老师 时间: 2012-2-29 17:35
while(num!=0)
{
{
int temp = num&1;
arr[pos--] = chs[temp];
num = num>>>1;