一:進制
進制是計算機中數(shù)據(jù)的一種表示方法。 N進制的數(shù)可以用0~(N-1) 的數(shù)表示, 超過9的用字母A-F 表示 .
10進制,就是 用 0~9 的數(shù)表示,逢10 進 1
16進制,就是 由 0-9,A-F組成, 與10進制的對應關系是:0-9 對應0-9;A-F對應10- 15(字母不區(qū)分大小寫)
2進制 由 0-1組成
8進制 由 0-7組成
1:n 進制 轉十進制
假設我們要將n進制轉換為十進制,首先我們從n進制的右邊為第一位數(shù)(從低位到高位),其權值是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,依次除下去,直到不能再被除為止,然后將余數(shù)從下往上取。
二 : 二進制,八進制,十六進制 轉 十進制
Solution 1: 用java提供的api完成轉換
Integer.valueOf(String s, int radix)
Solution 2: 自己寫算法實現(xiàn)上面公式
/**
* 轉換2,8,16進制成10進制
* @param chars 2,8,16進制字符串
* @param baseNum 2,8,16進制
* @return 10進制數(shù)值
*/
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: 自己寫算法實現(xiàn)上面公式
/**
* 將10進制轉成2,8,16進制
* @param decimal 10進制數(shù)值
* @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();
}