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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 高鑫 中级黑马   /  2012-4-28 11:20  /  1771 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. class Demo
  2. {        public static void main(String[] args)
  3.         {         toHex(60);
  4.         }
  5.         public static void toHex(int num)
  6.         {
  7.                 char [] chn={'1','2','3','4',
  8.                                         '5','6','7','8',
  9.                                         '9','A','B','C',
  10.                                         'D','E','F'};
  11.                 char [] arr=new char[8];
  12.                 int pos=8;
  13.                 while(num!=0)
  14.                 {        int temp=num&15;
  15.                         arr[--pos]=chn[temp];
  16.                         num =num>>>4;
  17.                 }
  18.                 for(int x=pos;x<arr.length;x++)
  19.                 {
  20.                         System.out.print(arr[x]);
  21.                
  22.                
  23.                 }                               

  24.         }




  25. }
复制代码
输入60,结果却是4D,错在哪了啊??死活找不到

5 个回复

倒序浏览
本帖最后由 黑马我来了 于 2012-4-28 12:21 编辑

  呵呵 char [] chn={'1','2','3','4',

                                    '5','6','7','8',

                                      '9','A','B','C',

                                     'D','E','F'};  少个0,计算机里面,是从0开始的额!

回复 使用道具 举报
while(num!=0)

14.                {        int temp=num&15;

15.                        arr[--pos]=chn[temp-1];  //下标你没有控制

16.                        num =num>>>4;

17.                }

回复 使用道具 举报
char[]数组定义少了一个0,
回复 使用道具 举报
class Demo

{        public static void main(String[] args)

        {         toHex(60);

        }

        public static void toHex(int num)

        {

                char [] chn={'1','2','3','4',   

                                   '5','6','7','8',

                                   '9','A','B','C',

                                   'D','E','F'};//十六进制满16进1,很明显这里少了一个,应该是0~15才对,所以数组中第一个元素应该是0
                char [] arr=new char[8];

                int pos=8;

                while(num!=0)

                {        int temp=num&15;

                        arr[--pos]=chn[temp];

                        num =num>>>4;

                }

                for(int x=pos;x<arr.length;x++)

                {

                        System.out.print(arr[x]);

               

               

                }                                



        }









}
回复 使用道具 举报
  1. class Demo
  2. {        public static void main(String[] args)
  3.         {         toHex(60);
  4.         }
  5.         public static void toHex(int num)
  6.         {
  7.                 char [] chn={'1','2','3','4',
  8.                                         '5','6','7','8',
  9.                                         '9','A','B','C',
  10.                                         'D','E','F'};
  11.                                 /*这里的表中少定义了一个为0的数符,每个进制都是有0这个数码的。
  12.                                 而60的二进制为0000 0000 0000 0000 0000 0000 0011 1100,
  13.                                 */
  14.                 char [] arr=new char[8];
  15.                 int pos=8;
  16.                 while(num!=0)
  17.                 {        int temp=num&15;//第一次得到1100,即12,查表得D(数组下标从0开始),第二次得到0011,即3,查表得4,故结果输出4D
  18.                         arr[--pos]=chn[temp];
  19.                         num =num>>>4;
  20.                 }
  21.                 for(int x=pos;x<arr.length;x++)
  22.                 {
  23.                         System.out.print(arr[x]);   
  24.                 }                              
  25.         }

  26. }
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马