黑马程序员--数组(三)进制转换
进制转换:封装成一个方法
将十进制转换为二进制
class ArrayText2
{
public static void main(String[] args)
{
toBin(6);
}
//十进制——>二进制
public static void toBin(int num){
StringBuffer sb=new StringBuffer();
while(num>0){
//System.out.println(num%2);
//将酶促%2的结果存放到容器中
sb.append(num%2);
num=num/2;
}
//将容器中的元素反转输出
System.out.println(sb.reverse());
}
}
结果:
将十进制转换成16进制
class ArrayText3
{
public static void main(String[] args)
{
toHex(60);
}
public static void toHex(int num){
StringBuffer sb=new StringBuffer();
for(int x=0;x<8;x++){
int temp=num&15;
if(temp>9){
sb.append((char)(temp-10+'A'));
}else{
sb.append(temp);
}
num=num>>>4;
}
System.out.println(sb.reverse());
}
}
结果:
查表法:
将所有的元素临时存储起来,建立对应关系,每一次&15后的值作为索引去查建立好的表,就可以找对应的元素,这样比-10+’a’简单的多
这个表怎么建立呢?
可以通过数据的形式来定义
使用数组来完成
示例代码:
class ArrayText6
{
public static void main(String[] args)
{
toHext(60);
}
public static void toHext(int num){
char[] chs={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
//定义一个临时容器数组
char[]arr=new char[8];
int pos=arr.length;//角标
while(num!=0){
int temp=num&15;
arr[--pos]=chs[temp];
num=num>>>4;
}
//将存储数据的数组arr遍历, 从有效位开始遍历
for(int i=pos;i<arr.length;i++){
System.out.print(arr[i]+",");
}
}
}
用查表法将十进制转换成二进制
示例代码:
class ArrayText4
{
public static void main(String[] args)
{
toBin(6);
}
public static void toBin(int num){
//定义二进制的表
char [] chs={'0','1'};
//定义一个临时存储容器
char [] arr=new char[32];
//定义一个操作数组的指针
int pos=arr.length;
while(num!=0){
int temp=num&1;
arr[--pos]=chs[temp];
num=num>>>1;
}
//从有效位开始遍历
for(int i=pos;i<arr.length;i++){
System.out.print(arr[i]);
}
}
}
结果:
发现无论是将10进制转换成16进制还是将10进制转换成2进制,有很多代码都是重复的,所以提取共性代码
示例代码:
class ArrayText5
{
public static void main(String[] args)
{
toBin(6);//转换为2进制
toHex(-60);//转换为16进制
toBa(60);//转换为8进制
}
//十进制-->二进制
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 bass,int offset){
//num 为要转换的数;bass为要&的数;offset为数组内存大小
if(num==0){
System.out.println(0);
return;
}
//定义进制表
char[] chs={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
//定义一个临时存储容器
char [] arr=new char[32];
//定义一个操作数组的指针
int pos=arr.length;
while(num!=0){
int temp=num & bass;
arr[--pos]=chs[temp];
num=num>>>offset;
}
for(int i=pos;i<arr.length;i++){
System.out.print(arr[i]);
}
System.out.println();
}
}
结果:
---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IOS开发</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------
详细请查看:<a
href="http://edu.csdn.net" target="blank">http://edu.csdn.net</a>