1. 10进制
123,456,789:
123,456,789 =
1 * 10^8 + 2 * 10^7 + 3 * 10^6 + 4 * 10^5 + 5 * 10^4 + 6 * 10^3 + 7 * 10^2 + 8 * 10^1 + 9 * 10^0;
2. 2进制
0011-1101:
61 = 0 * 2^7 + 0 * 2^6 + 1 * 2^5 + 1 * 2^4 + 1 * 2^3 + 1 * 2^2 + 0 * 2^1 + 1 * 2^0;
3. 8进制
o75:
61 = 7 * 8^1 + 5 * 8^0;
4. 16进制
0x3d:
61 = 3 * 16^1 + 13 * 16 ^ 0;
5.练习代码
/*
需求:
将指定的10进制数转换为指定的进制
思路:
根据各进制的特点来进行数据转换
步骤:
1.定义转换的方法
2.该方法需要接受两个参数,一个为10进制数,一个为要转换的目标进制
3.该方法返回一个目标进制的字符串
*/
class SysConvert
{
private static final int BASE_BIN = 2;
private static final int BASE_OCT = 8;
private static final int BASE_HEX = 16;
public static void main(String[] args)
{
System.out.println(dec2Other(29,2));
System.out.println(dec2Other(29,8));
System.out.println(dec2Other(29,16));
outputNumByBit(23232438);
}
/*
*/
public static String dec2Other(int num, int base)
{
if(BASE_BIN == base)
{
return toBinString(num);
}
else if(BASE_OCT == base)
{
return toOctString(num);
}
else if(BASE_HEX == base)
{
return toHexString(num);
}
return null;
}
/*
需求:
将10进制数转换为2进制
思路:
*/
private static String toBinString(int num)
{
final int base = 2;
StringBuffer sb = new StringBuffer();
while(0 != num)
{
sb.insert(0,num%base);
num /= base;
}
return (sb.length() == 0 ? "0" : sb.toString());
}
/*
需求:将10进制转换为8进制
*/
private static String toOctString(int num)
{
final int base = 8;
StringBuffer sb = new StringBuffer();
while(0 != num)
{
sb.insert(0,num%base);
num /= base;
}
return (sb.length() == 0 ? "0" : sb.toString());
}
/*
需求:
将10进制转换为16进制
注意:
16进制中大于9以后对应的为a,b,c,d,e,f
*/
private static String toHexString(int num)
{
final int base = 16;
StringBuffer sb = new StringBuffer();
while(0 != num)
{
if(num%base > 9)
{
sb.insert(0,(char)((num%base-10)+'a'));
}
else
{
sb.insert(0,num%base);
}
num /= base;
}
return (sb.length() == 0 ? "0" : sb.toString());
}
/*
需求:
将一个10进制的整形数按位输出
思路:
根据计算10进制数的规则来反向计算每位的数字
以12032为例:
12032 = 1*10(4) + 2*10(3) + 0*10(2) + 3*10(1) + 2*10(0);
步骤:
1.将10进制数与10做模运算,余数即为该位的数字;
2.将该数/10的结果赋回给该数;
3.继续步骤1,知道该数为0结束;
*/
private static void outputNumByBit(int num)
{
int base = 10;
while(num != 0)
{
System.out.println(num%base);
num /= base;
}
}
}
总结:以上是各进制与10进制之间的转换关系,通过这种关系即可以实现进制转换,我们可以以10进制为转换桥梁,也是一种转换方法。