來源
十七世紀有著亞里士多德之稱的萊布尼茲,通過在中國的傳教士,得到了八卦圖,他領悟到只要把八卦中的陰爻代表0,陽爻代表1,無極生太極,太極生兩儀,兩儀生四象,四象生八卦,八卦而生萬物。就可以創立一種新的記數法:二進制。
原理
二進制:由兩個基本數字0,1組成,運算規律是逢二進一.計算機都使用二進制表示數據。
八進制:由0、1、2、3、4、5、6、7組成,運算規律是逢八進一。
十進制:由0,1,2、3、4、5、6、7、8、9組成。逢10進一
十六進制:由0~9以及A,B,C,D,E,F組成。逢16進一
各種進制轉換
二進制--->八進制:
從右往左每3位合成一位。不足3位補0,010101011轉為8進制變為253
二進制--->十進制:
從右往左,每位數值乘以2的(位數-1)次方,再求和
二進制--->十六進制:
從右往左每4位合成一位。不足4位補0,0 1010 1011轉為8進制變為 0XAB
八進制--->二進制:
從右往左每一位拆分成3位二進制。253轉為010101011(看上圖)
八進制--->十進制:
從右往左,每位數值乘以8的(位數-1)次方,再求和
八進制--->十六進制:
先把八進制轉換為二進制,然後再轉換為十六進制。也可以先把八進制轉換為十進制,然後再轉換為十六進制。
十進制--->二進制:
十進制的1位為數值/2的1次方的餘數,2位為數值/2的2次方的餘數,3位為數值/2的3次方的餘數
十進制--->八進制:
十進制的1位為數值/8的1次方的餘數,2位為數值/8的2次方的餘數,3位為數值/8的3次方的餘數
十進制--->十六進制:
十進制的1位為數值/16的1次方的餘數,2位為數值/16的2次方的餘數,3位為數值/16的3次方的餘數
十六進制--->二進制:
從右往左每一位拆分成4位二進制。XAB轉為10101011
十六進制--->八進制:
先把十六進制轉換為二進制,然後再轉換為八進制。也可以先把十六進制轉換為十進制,然後再轉換為八進制。
十六進制--->十進制:
從右往左,每位數值乘以16的(位數-1)次方,再求和
Java Demo
1、parseInt 格式化字符串到指定進制有符號整數
*
* parseInt("0", 10) returns 0
* parseInt("473", 10) returns 473
* parseInt("+42", 10) returns 42
* parseInt("-0", 10) returns 0
* parseInt("-FF", 16) returns -255
* parseInt("1100110", 2) returns 102
* parseInt("2147483647", 10) returns 2147483647
* parseInt("-2147483648", 10) returns -2147483648
* parseInt("2147483648", 10) throws a NumberFormatException
* parseInt("99", 8) throws a NumberFormatException
* parseInt("Kona", 10) throws a NumberFormatException
* parseInt("Kona", 27) returns 411787
*
*
* @param s the {@code String} containing the integer
* representation to be parsed
* @param radix the radix to be used while parsing {@code s}.
* @return the integer represented by the string argument in the
* specified radix.
* @exception NumberFormatException if the {@code String}
* does not contain a parsable {@code int}.
*/
public static int parseInt(String s, int radix) throws NumberFormatException`2、toUnsignedString0將整數轉換為指定進制的字符串
/**
* Convert the integer to an unsigned number.
*/
private static String toUnsignedString0(int val, int shift)3、DataConvertUtil工具類
public class DataConvertUtil {
public static String c2t8(String num) {
return c10t8(c2t10(num));
}
public static int c2t10(String num) {
return Integer.parseInt(num, 2);
}
public static String c2t16(String num) {
return c10t16(c2t10(num));
}
public static String c8t2(String num) {
return c10t2(c8t10(num));
}
public static int c8t10(String num) {
return Integer.parseInt(num, 8);
}
public static String c8t16(String num) {
return c10t16(c8t10(num));
}
public static String c10t2(int num) {
return Integer.toBinaryString(num);
}
public static String c10t8(int num) {
return Integer.toOctalString(num);
}
public static String c10t16(int num) {
return Integer.toHexString(num);
}
public static String c16t2(String num) {
return c10t2(c16t10(num));
}
public static String c16t8(String num) {
return c10t8(c16t10(num));
}
public static int c16t10(String num) {
return Integer.parseInt(num, 16);
}}
4、測試用例
@Test
void contextLoads() {
String c2 = "1010100";
String c8 = "124";
int c10 = 84;
String c16 = "54";
Assert.assertEquals("c2t8 不通過", c8, DataConvertUtil.c2t8(c2));
Assert.assertEquals("c2t10 不通過", c10, DataConvertUtil.c2t10(c2));
Assert.assertEquals("c2t16 不通過", c16, DataConvertUtil.c2t16(c2));
Assert.assertEquals("c8t2 不通過", c2, DataConvertUtil.c8t2(c8));
Assert.assertEquals("c8t10 不通過", c10, DataConvertUtil.c8t10(c8));
Assert.assertEquals("c8t16 不通過", c16, DataConvertUtil.c8t16(c8));
Assert.assertEquals("c10t2 不通過", c2, DataConvertUtil.c10t2(c10));
Assert.assertEquals("c10t8 不通過", c8, DataConvertUtil.c10t8(c10));
Assert.assertEquals("c10t16 不通過", c16, DataConvertUtil.c10t16(c10));
Assert.assertEquals("c16t2 不通過", c2, DataConvertUtil.c16t2(c16));
Assert.assertEquals("c16t8 不通過", c8, DataConvertUtil.c16t8(c16));
Assert.assertEquals("c16t10 不通過", c10, DataConvertUtil.c16t10(c16));
}源碼
http://wglbk.cn/post/6
"
閱讀更多 遠帆Dragon 的文章