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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 那些人之一 中级黑马   /  2013-11-23 17:53  /  1182 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 那些人之一 于 2013-11-23 18:55 编辑

今天在看毕老师的数组进制转换-整合视频时,跟毕老师敲一样的代码,为什么他没出现问题,我出现了?代码如下,  在主函数里调用,都是整数,程序可以通过,但是如果是查找负数 ,就通不过,但是毕老师视频里,他通过了.问题是在哪里?
  1. // 查表法
  2. <div class="blockcode"><blockquote>public static void main(String[] args)
  3.         {
  4.                 tosixth(60);
  5.                 totwo(6);
  6.                 toeightto(60);
  7.          }
  8.         public static void tosixth(int num)
  9.         {
  10.                 tobiao(num,15,4);
  11.         }
复制代码
public static void tobiao(int num,int base,int offset)
        {
                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[32];
                int pos =arr.length;
               
                while (num!=0)
                {
                        int temp=num &base;
                        arr[--pos]=chs[temp];
                        num =num>>offset;
                }
                //System.out.println("pos="+pos);
                // Pos 代表最左边存储的位置
                for (int x=pos ;x<arr.length ;x++ )
                {
                        System.out.print(arr[x]);
                }
                System.out.println();


评分

参与人数 1技术分 +1 黑马币 +4 收起 理由
枫儿 + 1 + 4 神马都是浮云

查看全部评分

5 个回复

倒序浏览
目测是
  1. num =num>>offset;
复制代码
这句的的错误
改为
  1. num =num>>>offset;
复制代码
>>无符号右移 >>>有符号右移  

没测试,猜的!

回复 使用道具 举报
num =num>>offset;
这句代码应该改为:num =num>>>offset;要用无符号右移,最高位用0补,你还是好好看看毕老师的视频吧。

评分

参与人数 1黑马币 +5 收起 理由
枫儿 + 5 很给力!

查看全部评分

回复 使用道具 举报
>>无符号右移 >>>有符号右移    写反了
应该是
>> 有符号右移  
>>>  无符号右移
瞎了,谅解!

评分

参与人数 1黑马币 +5 收起 理由
枫儿 + 5 很给力!

查看全部评分

回复 使用道具 举报
亲,你的问题出现在这里:
while (num!=0)
{
int temp=num &base;
arr[--pos]=chs[temp];
num =num>>offset;//这里应该是num=num>>>offset;那么为什么应该是无符号右移呢?因为对于负数有符号右移来说,右移几位,是在高位添加几位的1.所以
右移多少次,就添加多少次1,这样将永远移不完,成了死循环。而如果负数无符号右移,是右移几位,则在高位添加几位的0,这样等到num有效位移完的时候,num就变成了0,循环结束。

}


评分

参与人数 1技术分 +1 黑马币 +4 收起 理由
枫儿 + 1 + 4 亲,继续加油!

查看全部评分

回复 使用道具 举报
谢谢各位啊,其实我在看毕老师的视频的时候也很奇怪为什么他是>>> ,而我>>也可以,因为听毕老师的视频有时候因为声音的原因,有点听不清楚。呵呵,现在总算明白了,谢谢各位啊。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马