黑马程序员技术交流社区

标题: 关于查表法的解释与分析 [打印本页]

作者: LINUS    时间: 2013-3-22 21:06
标题: 关于查表法的解释与分析
/*
利用数组查表法,
计算十进制转十六进制.
代码自己根据自己意思写的,注释可能有不妥当的地方 ,麻烦也给指出吧...
*/


class Demo{
    public static void main(String[] args){
    char[] ch ={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};// 自定义 16进制 数组表
    char[] chs=new char[8]; //二进制四位一组 32位 分为8组 ,新建一个叫chs数组名 分8格的 一个数组
    int temp = 110;//二进制是 1101110 ,定义个变量 十进制是110
    int num = 0;//定义一个变量 num 为0,
    int x = 0;// 定义数组角标 x=0.
    while(temp!=0){
        num = temp & 15;//十六进制结果14 即为E  // 十进制变量temp & 二进制1111(十进制即为15)得到结果 就是十六进制的末位数.
        //chs[x++]=ch[num];  这个方法不太懂 我意思是直接可以输出 ch[num]
        temp = temp >> 4;//二进制temp右移4位,转换为十进制即为 十六进制十位数.
        System.out.print(ch[num]);
    }
   
    //for (int y =0;y< chs.length ;y++ ){
    //System.out.print(chs[y]+",");
    //}
    }


}


因为上面代码运行后 十六进制没有对调

我用  数组反转  给掉一下

结果输出却不是正确的十六进制.

请教一下.

还有帮忙分析一下..

万分感谢....







作者: lxww    时间: 2013-3-22 22:30
亲。你的好多步骤都起不到作用。我整理半天。最后还是给你写了一个,你看看。
class  Test10
{
        public static void main(String[] args)
        {
                String s1=toHex(110);

                System.out.println("十进制数110转换成十六进制数为"+s1);
        }
        public static String toHex(int n){
               
        String str="";
        String[] tools={"0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"};
               
        int[] arr=new int[32];
               
        int index=0;
               
        for(;index<arr.length;index++){
                       
                arr[index]=n&15;   
                n=n>>>4;  
                       
                if(n==0){
                        break;
                }
        }
               
        for(int i=index;i>=0;i--){
                       
                int number=arr[i];

                str+=tools[number];
        }
        return str;
        }
}
作者: 曹玉龙    时间: 2013-3-22 22:54
  1. class Demo
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.         //调用转换函数
  6.                 toHex(10);                               
  7.         }       
  8.         //用于转换并输出显示
  9.         public static void toHex(int num)
  10.         {
  11.           //定义一个存储代表十六进制符号的字符型数组
  12.                 char [] arr = {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};
  13.                 //动态初始化一个用来存储提取出最低位4个二进制数的转换值
  14.                 char [] chs = new char[8] ;
  15.                 //定义一个指针
  16.                 int point = chs.length;
  17.                 //开始转换
  18.                 //num等于0的情况
  19.                 if( num == 0)
  20.                 {
  21.                         System.out.print(0);
  22.                         return ;
  23.                 }
  24.                 //num不等于0的情况
  25.                 while (num != 0)
  26.                 {
  27.                                 //获取最低4位的值
  28.                                 int temp = num & 15;
  29.                                 point--;
  30.                                 //将获得的最低4位的值存入chs
  31.                           chs[point] = arr[temp];       
  32.                           //截去最低4位
  33.                                 num = num >>> 4;
  34.                
  35.                 }
  36.                 //依次输出每一个存储的 十六进制字符
  37.                 for (int x = point;x < chs.length;x++)
  38.                         {
  39.                                
  40.                                 System.out.print(chs[x]);
  41.                         }                       
  42.        
  43.         }
  44. }
复制代码

作者: 黄诗宾    时间: 2013-3-22 22:59
查表法原理:

代码:
  1. /*
  2.   查表法
  3.   110十进制
  4.   编写程序,算成十六进制 6E

  5.   问题?
  6.   0-9 A-F
  7.   110--》二进制 -->十六进制(4个二进制)

  8.   位运算 & | ^ <<  >>  >>> ~
  9. */
  10. class  ArrayDemo5
  11. {
  12.         public static void main(String[] args)
  13.         {
  14.                 //System.out.println(110&15);//14
  15.                 //System.out.println((110>>>4 )&15);//6
  16.                 //1.制作表,字符型数组‘
  17.                 toHex(0B110);//JDK1.7新特性
  18.         System.out.println(Integer.toHexString(1010));
  19.                
  20.                     
  21.         }
  22.         public static void toHex(int n)
  23.         {
  24.           char[] ch = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
  25.                 //2.定义数组,存储查表后的结果

  26.                 char[] chs= new char[8];
  27.                 int temp = n;//1101110
  28.         int num = 0;
  29.                 int x = chs.length ;
  30.                 while(temp!=0)//110
  31.                 {
  32.                    num = temp & 15;//14  6
  33.                  //  System.out.println(ch[num]);
  34.                    chs[--x]=ch[num];
  35.                    temp = temp >>> 4;//000
  36.                   
  37.                 }
  38.                 for(int y = x ; y< chs.length;y++)
  39.                 {
  40.                    System.out.print(chs[y]);
  41.                 }
  42.                               
  43.         }
  44. }
复制代码





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