数组的演变查表法



   最近学到数组的遍历方法  。刚开始学的时候有点复杂,但多看了几遍后 有了一点小理解了,利用查表法算出十进制的其他进制的表现形式。

查表法:将所有的元素临时存储起来,建立对应关系。
 每一次&15后的值作为索引去查建立好的表,就可以找对应的元素,
 这样比 -10+'A'简单的多。

 这个表怎么建立呢?
可以通过数组的形式来定义。

  0  1  2  3  4  5  6  7  8  9   A   B    C     D     E   F======十六进制中元素
  0  1  2  3  4  5  6  7  8  9  10  11  12  13  14  15
 
    0000-0000 0000-0000 0000-0000 0011-1100
 &0000-0000 0000-0000 0000-0000 0000-1111 = 15
 ----------------------------------------------------
   0000-0000 0000-0000 0000-0000 0000-1100 = 12-->C
 
 
                 0000-0000 0000-0000 0000-0000 0011-1100  >>>   右移四位
    &0000-0000 0000-0000 0000-0000 0000-1111 = 15
    --------------------------------------------------
   &0000-0000 0000-0000 0000-0000 0000-0011 = 3
   60--->3C


package com.util;
//用查表法 算出十进制的二进制和十六进制的表达形式
public class ArrayTest5 {
	public static void main(String args[])
	{
		toHex(60);
		toBin(6);
	}
	
	//二进制
	 public static void toBin(int num)
	 {
		 char ch[] = {'0','1'};
		 //定义一个临时容器
		 char arr[] = new char[32];
		 //定义指针
		 int pos = 0;
		 while (num!=0)//for(int x=0;x<32;x++)的优化
		 {
			 int temp = num&1;//最大数是1
			 //System.out.println(ch[temp]);
			 arr[pos++] = ch[temp];
			 
			 num = num>>>1;
		 }
		 //存储数据的arr数组遍历
		 for(int x=pos-1;x>=0;x--)
		 {
			 System.out.print(arr[x]+",");
		 }
	 }
	//十六进制
	 public static void toHex(int num)
	 {
		 char ch[] = {'0','1','2','3'
				 ,'4','5','6','7'
				 ,'8','9','A','B'
				 ,'C','D','E','F'};
		 //定义一个临时容器
		 char arr[] = new char[8];
		 int pos = 0;
		 while (num!=0)//for(int x=0;x<8;x++)
		 {
			 int temp = num&15;
			 //System.out.println(ch[temp]);
			 arr[pos++] = ch[temp];
			 
			 num = num>>>4;
		 }
		 //存储数据的arr数组遍历
		 for(int x=pos-1;x>=0;x--)
		 {
			 System.out.print(arr[x]+",");
		 }
	 }

}
但是这样好多代码就重复了   为了代码的利用性提高 可以把相同的代码抽取出来


修改之后

package com.util;
//十进制换算  二进制  八进制   十六进制的表现形式
public class ArrayTest6 {
	public static void main(String args[])
	{
		toBin(6);
		toBa(60);
		toHex(60);
		
	}
	
	//二进制的方法
	public static void toBin(int num)
	{
		trans(num,1,1);
	}
	//八进制的方法
	public static void toBa(int num)
	{
		trans(num,7,3);
	}
	//十六进制的方法
	public static void toHex(int num)
	{
		trans(num,15,4);
	}
	public static void trans(int num,int base,int offset) //base为要与(&)的数,offset为要右移(>>>)的位数
	{
		 //当要打印0的其他进制时  直接返回0
		 if(num==0)
		 {
			 System.out.println(0);
			return;
 		}
		char ch[] = {'0','1','2','3'
				 ,'4','5','6','7'
				 ,'8','9','A','B'
				 ,'C','D','E','F'};
		char arr[] = new char[32];//int最大32位
		 int pos = 0;//
		 while (num!=0)//for(int x=0;x<8;x++)
		 {
			  int temp = num&base;
 			 //System.out.println(ch[temp]);
			  arr[pos++] = ch[temp];
			 
			 num = num>>>offset;
		 }
		 //存储数据的arr数组遍历
		 for(int x=pos-1;x>=0;x--)
		 {
			 System.out.print(arr[x]);
		 }
	}
	

这样看起来就简单多了  主要就是一些算法比较麻烦一点 什么&、>>>的运算。

通过这些的联系就知道了数组的基本遍历。

好好学习  天天向上!

你可能感兴趣的:(学习日志)