最近学到数组的遍历方法 。刚开始学的时候有点复杂,但多看了几遍后 有了一点小理解了,利用查表法算出十进制的其他进制的表现形式。
查表法:将所有的元素临时存储起来,建立对应关系。
每一次&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]);
}
}
通过这些的联系就知道了数组的基本遍历。
好好学习 天天向上!