黑马程序员技术交流社区

标题: 十进制转十六进制,问题在哪? [打印本页]

作者: 高鑫    时间: 2012-4-28 11:20
标题: 十进制转十六进制,问题在哪?
  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,错在哪了啊??死活找不到
作者: 李震 李震 李震    时间: 2012-4-28 12:19
本帖最后由 黑马我来了 于 2012-4-28 12:21 编辑

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

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

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

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


作者: 奥特曼爱小怪兽    时间: 2012-4-28 12:31
while(num!=0)

14.                {        int temp=num&15;

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

16.                        num =num>>>4;

17.                }


作者: 胡奎    时间: 2012-4-28 13:04
char[]数组定义少了一个0,
作者: 马浩    时间: 2012-4-28 13:54
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]);

               

               

                }                                



        }









}

作者: 杨威    时间: 2012-4-28 14:11
  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. }
复制代码





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2