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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© air 中级黑马   /  2013-10-17 18:25  /  1013 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 air 于 2013-10-18 10:24 编辑

短短20分钟的视频,几个圈把我绕晕了,发狠了,听一条边写一条,然后自己在后面一行行打注释写自己的想法给自己看,可是自学啊,不知道自己想的对还是不对,只能拜托论坛里的同学了,我这样想是对的还是错的呢?class toHex
{
public static void main(String[] args) //主函数
{           
toHex_2(60);       //需要转换的数值  
}

/*第一种方法
public static void toHex(int num)
{
  StringBuffer av =new StringBuffer();
for (int x=0;x<8;x++ )
{
  int temp = num&15;
  if(temp>9)
   av.append((char)(temp-10+'A'));
  else
   av.append(temp);
  num = num>>> 4;
}
System.out.println(av.reverse());
}
*/
public static void toHex_2(int num)   //第二种方法
{
char[] chs ={'0','1','2','3',   //首先建立一张对应的表
                    '4','5','6','7',   
                   '8','9','A','B',
                   'C','D','E','F'};
    char[] arr = new char[8];//建立一个新的数组,这个数组归属于,二进制中32位里的每4位换成1位.
int pos=arr.length;      //建立一个指针,指向新建数组
while(num!=0)           //在传进来的数不等于0的情况下循环
{
int temp= num & 15;  //建立临时变量,这个变量就是,把传进来的数(60)与 15的结果,结果也就是arr里的其中一位
  arr[--pos] = chs[temp]; //arr[先自减就是最后一位的角标],就是把上一条表达式里的temp当做一个元素写入这个arr[].
                                    //之所以要先[--pos]的原因是,正常写的话不方便阅读,倒着写就能正着打印阅读.
  num = num >>> 4;  //然后把60(num)移了4个2进制位后剩余的数值继续赋给原来的60(num).才能进行下一次循环
                                //下一次循环,如果遍历的话,就要8次,不够灵活,所以用的while,满足条件才循环,减少循环次数.
}

for (int x=0;x<arr.length;x++)//这个for循环的目的是为了正着打印阅读,个人习惯
{
  System.out.print(arr[x]);   //打印最终结果
}

}
}



评分

参与人数 1技术分 +1 收起 理由
To + 1 赞一个!

查看全部评分

4 个回复

正序浏览
air 中级黑马 2013-10-18 10:24:01
报纸
{:soso_e113:}谢谢朋友们,我明白啦~
回复 使用道具 举报
哥们我能说我刚刚复习完进制转换就看到你的帖子。
你以后帖代码贴在代码区吧,不然看起来很费劲。
你的理解是没问题的!加油!
回复 使用道具 举报
你理解貌似有点模糊哦,主要明白他是将原数,
在低4位的地方装换就ok了,转完了,移走,高4位到低4位,继续转
最终全移完就0了,注释要简单点嘛
public static void toHex_2(int num)   //第二种方法
        {
                //表
                char[] chs ={'0','1','2','3', '4','5','6','7',  '8','9','A','B', 'C','D','E','F'};
               
                //16进制占4位,32位的系统能转8个
                char[] arr = new char[8];
               
                //用来移动的游标,默认在尾部
                int pos=arr.length;
               
                //转换到num为0,即转换完毕
                while(num!=0)
                {
                        //15其实就二进制4个1,即取num的低4位,即temp = xxxxxxxx & 00001111
                        int temp= num & 15;  
                       
                        //temp为num的低4位,刚好转16进制的4位,查表转换后插入arr中,arr倒插不过是为了观看方便,
                        //插入一个,游标左移,准备下一个位置
                        arr[--pos] = chs[temp];
                       
                        //num的低4位已被转换,将转换的4位右移掉,那么num的高4位,就会移到低4位
                        //进行下一次循环的4位转换,>>>补0右移知道吧

                        num = num >>> 4;  
                        }
                       
                        System.out.print(Arrays.toString(arr));
        }

希望对你有帮助....
回复 使用道具 举报
    对啊,我觉得你理解的没有什么问题。
    最后一个for循环,如果条件改成:for(x = pos; x<arr.length;x++ )效果会更好,这样打印出来的就不会有前面的那些空格了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马