目录
- 一、整数十进制转二进制:
- 1、调用API函数(简便方法)
- 2、除基倒取余法
- 3、位移操作实现
- 二、小数十进制转二进制:
- 三、进制间任意转换:
- 1、java自带方法(简便方法)
- 2、自定义方法
- 任意进制转十进制
- 十进制转任意进制
一、整数十进制转二进制:
1、调用API函数(简便方法)
思路:最简单的方法,直接用java封装好的函数计算。
public static String DecimalToBinary(int n){
String result = Integer.toBinaryString(n);
return result;
}
注: 此代码中,可以直接用字符串输出;也可以利用Interger.parseInt()转化为int,但不建议这种方式,当为负数时,int型的表示不了32的一个整数。
2、除基倒取余法
1.思路:每次得出一位二进制乘 (int)Math.pow(10, t),返回值为int
public static int DecimalToBinary(int n){
int t = 0; //用来记录位数
int bin = 0; //用来记录最后的二进制数
int r = 0; //用来存储余数
while(n != 0){
r = n % 2;
n = n / 2;
bin+=r*(int)Math.pow(10, t);
t++;
}
return bin;
}
2.思路:每次把得出的二进制拼接,返回值为String
public static String DecimalToBinary(int n){
String s = "";
while(n!=0) {
s = n%2+s;
n = n/2;
}
return s;
}
3、位移操作实现
思路:将最高位的数移至最低位(移31位),除过最低位其余位置清零,使用& 操作,可以使用和1相与(&),由于1在内存中除过最低位是1,其余31位都是零,然后把这个数按十进制输出;再移次高位,做相同的操作,直到最后一位 。
public static String DecimalToBinary(int n){
String s="";
for(int i=31;i>=0;i--) {
int index = n >>> i & 1;
System.out.print(index);
s=String.valueOf(index)+s;
}
return s;
}
二、小数十进制转二进制:
思路:小数转换与整数转化大同小异,需要先将整数与小数部分分开,各自转换,最后根据需求合并。
public static String DecimalToBinary(double n) throws Exception{
int in = (int) n;// 整数部分的值
double r = n - in;// 小数部分的值
String s = "";
while (in != 0) {
s = in%2+s;
in = in/2;
}
s+=".";
int count = 32; // 限制小数部分位数最多为32位,如果超过32为则抛出异常
double num = 0;
while (r > 0.0000000001) {
count--;
if (count == 0) {
throw new Exception("Cannot change the decimal number to binary!");
}
num = r * 2;
if (num >= 1) {
s+="1";
r = num - 1;
} else {
s+="0";
r = num;
}
}
return s;
}
三、进制间任意转换:
思路:先将输入进制转化为十进制,在将十进制转化为目标进制。
1、java自带方法(简便方法)
不得不感叹java的便捷,常用进制转换已经封装好,直接使用即可。
//10进制转换 16进制
System.out.println(Integer.toHexString(val));
System.out.println(String.format("%x", val));
//10进制转换 8进制
System.out.println(Integer.toOctalString(val));
System.out.println(String.format("%o", val));
//10进制转换 2进制
System.out.println(Integer.toBinaryString(val));
//16进制转换 10进制
System.out.println(Integer.valueOf("f", 16));
//8进制转换 10进制
System.out.println(Integer.valueOf("11", 8));
//2进制转换 10进制
System.out.println(Integer.valueOf("0101", 2));
2、自定义方法
任意进制转十进制
public static int ToDecimal(int jinzhi, String str){
int d; // 保存取出的最低位
int p = 0; // 保存当前位权,从个位开始
int sub = 0; // 保存当前数值
char c;
int length = str.length();
for(int i= 0; i<length;i++) {
c = str.charAt(i);
// 将字符转换为对应的数字
if(c>='A' && c<= 'Z') {
d = c - 55;
}else if(c>='a' && c<= 'z') {
d = c - 87;
}else {
d = c - 48;
}
// 当前位权
p = length - 1-i;
// 0^0 = 1
if(d != 0) {
sub += d*(int)Math.pow(jinzhi,p);
}
}
return sub;
}
十进制转任意进制
public static String DecimalTo(int num,int jinzhi){
//table[]中的内容根据具体情况添加,此处仅做参考
String[] table ={"0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"};
ArrayList<String> list = new ArrayList<>();
int tmp = 0;
while(num!=0){
tmp = num%jinzhi;
num /= jinzhi;
list.add(table[tmp]);
}
int len = list.size();
String s="";
for(int i = len-1;i>=0;i--){
s+=list.get(i);
}
return s;
}
参考资料:
JAVA 进制转换 十进制转任意进制