一:进制
进制是计算机中数据的一种表示方法。 N进制的数可以用0~(N-1) 的数表示, 超过9的用字母A-F 表示 .
10进制,就是 用 0~9 的数表示,逢10 进 1
16进制,就是 由 0-9,A-F组成, 与10进制的对应关系是:0-9 对应0-9;A-F对应10- 15(字母不区分大小写)
2进制 由 0-1组成
8进制 由 0-7组成
1:n 进制 转十进制
假设我们要将n进制转换为十进制,首先我们从n进制的右边为第一位数(从低位到高位),其权值是n的0次方,第二位是n的1次方,依次递增下去,把最后的结果相加的值就是十进制的值了。
公式:
(xyz)n = x * n ^ 2 + y * n ^1 + z * n ^0
(101)2 = 1 * 2 ^2 + 0 * 2^1 + 1 * 2^0 = 5
(101)8 = 1 * 8 ^2 + 0 * 8^1 + 1 * 8^0 = 65
(101)16 = 1 * 16 ^2 + 0 * 16^1 + 1 * 16^0 = 257
2:十 进制 转 n 进制
假设我们要将十进制转换为n进制,首先我们十进制除以权值n,依次除下去,直到不能再被除为止,然后将余数从下往上取。
二 : 二进制,八进制,十六进制 转 十进制
Solution 1: 用java提供的api完成转换
Integer.valueOf(String s, int radix)
Solution 2: 自己写算法实现上面公式
/**
* 转换2,8,16进制成10进制
* @param chars 2,8,16进制字符串
* @param baseNum 2,8,16进制
* @return 10进制数值
*/
private int calcIntValue(char[] chars, int baseNum) {
int length = chars.length;
int value = 0;
for(char c : chars) {
value += (Integer.valueOf(c) - 48) * Math.pow(baseNum, length - 1);
length -= 1;
}
return value;
}
三: 十进制 转 二进制,八进制,十六进制
Solution 1: 用java提供的api完成转换
Integer.toBinaryString(int i)
Integer.toOctalString(int i)
Integer.toHexString(int i)
Solution 2: 自己写算法实现上面公式
/**
* 将10进制转成2,8,16进制
* @param decimal 10进制数值
* @param baseNum 2,8,16进制
* @return 2,8,16进制 串
*/
private String calcConvertString(int decimal, int baseNum) {
this.dataStack = new LinkedList<Integer>();
StringBuilder sbBinary = new StringBuilder();
int x = 0;
while (0 != (decimal / baseNum)) {
x = decimal % baseNum;
this.dataStack.push(x);
decimal = decimal / baseNum;
}
this.dataStack.push(decimal % baseNum);
while (null != this.dataStack.peek()) {
sbBinary.append(this.dataStack.pop());
}
return sbBinary.toString();
}