您的位置:首页 > 编程语言 > Java开发

Java学习笔记:十进制转换和二进制的转换

2013-08-05 20:47 295 查看
  对于禁止的转换,一直是我很头疼的事。这两天特别的看了一些关于进制转换的资料,写了一个类。用于各进制之间的转换,还不完整。

public class ConversionOfNumber
{
/**
全局变量,获取进制对应值
*/
private static char[] NumChar=new char[]{'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
private ConversionOfNumber(){}
/**
十进制转二进制
*/
public static String DecimalToBinary(int i)
{
return DecimalTransition(i,1,1);
}
/**
十进制转八进制
*/
public static String DecimalToOctonary(int i)
{
return DecimalTransition(i,7,3);
}
/**
十进制转十六进制
*/
public static String DecimalToHexadecimal(int i)
{
return DecimalTransition(i,15,4);
}
/**
十进制转换方法
*/
private static String DecimalTransition(int i,int system,int offset)
{
if(i==0)
return "0";
char[] arr=new char[32];
int len=arr.length;
while(i!=0)
{
int temp=i&system;
arr[--len]=NumChar[temp];
i=i>>>offset;
}
String num="";
for(;len<arr.length;len++)
{
num+=arr[len]+"";
}
return num;
}
/**
二进制转十进制
*/
public static String BinaryToDecimal(String num)
{
return BinaryTransition(num,1);
}
/**
二进制转八进制
*/
public static String BinaryToToOctonary(String num)
{
return BinaryTransition(num,3);
}
/**
二进制转十六禁止
*/
public static String BinaryToHexa(String num)
{
return BinaryTransition(num,4);
}
/**
二进制转换方法
*/
private static String BinaryTransition(String num,int system)
{
String result="";
int temp=0;
int sum=0;
for(int i=0;i<num.length();i++)
{
int c=Integer.parseInt(num.substring(num.length()-i-1,num.length()-i));
sum+=c*Power(2,temp);
temp++;
if(temp%system==0)
{
if(system==1)
{
sum=c*Power(2,i);
result=(sum+Integer.parseInt(result==""?"0":result))+"";
}else
{
result=NumChar[sum]+result;
}
sum=0;
temp=0;
}
}
return (sum==0?"":sum)+result;
}
/**
二进制,八进制,十六进制。转换成十进制
*/
private static int TransitionToDecimal(String num,int system)
{
int sum=0;
for(int i=0;i<num.length();i++)
{
char c=num.charAt(num.length()-i-1);
int n=GetDecimalNum(c);
sum+=n*Power(system,i);
}
return sum;
}
/**
八进制转二进制
*/
public static String OctonaryToBinary(String num)
{
return DecimalTransition(TransitionToDecimal(num,8),1,1);
}
/**
八进制转十进制
*/
public static int OctonaryToDecimal(String num)
{
return TransitionToDecimal(num,8);
}
/**
八进制转十六进制
*/
public static String OctonaryToHexadecimal(String num)
{
return  DecimalTransition(TransitionToDecimal(num,8),15,4);
}
/**
十六进制转二进制
*/
public static String HexadecimalToBinary(String num)
{
return DecimalTransition(TransitionToDecimal(num,16),1,1);
}
/**
十六进制转十进制
*/
public static int HexadecimalToDecimal(String num)
{
return TransitionToDecimal(num,16);
}
/**
十六进制转八进制
*/
public static String HexadecimalToOctonary(String num)
{
return  DecimalTransition(TransitionToDecimal(num,16),7,3);
}
/**
查找数组索引
*/
private static int GetDecimalNum(char c)
{
for(int i=0;i<NumChar.length;i++)
{
if(NumChar[i]==c)
return i;
}
return -1;
}
/**
次方运算
*/
private static int Power(int i,int e)
{
if(e>=0)
return Powers(i,e);
else
return 1/Powers(i,-e);//考虑小数点后面的时候使用
}
/**
次方运算
*/
private static int Powers(int i,int e)
{
if(e>0)
return i*Power(i,e-1);
else
return 1;
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: