二進制、八進制、十進制、十六進制等互相轉換,Java演示demo

來源

十七世紀有著亞里士多德之稱的萊布尼茲,通過在中國的傳教士,得到了八卦圖,他領悟到只要把八卦中的陰爻代表0,陽爻代表1,無極生太極,太極生兩儀,兩儀生四象,四象生八卦,八卦而生萬物。就可以創立一種新的記數法:二進制。

二進制、八進制、十進制、十六進制等互相轉換,Java演示demo

原理

二進制:由兩個基本數字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

二進制、八進制、十進制、十六進制等互相轉換,Java演示demo

二進制--->十進制:

從右往左,每位數值乘以2的(位數-1)次方,再求和

二進制、八進制、十進制、十六進制等互相轉換,Java演示demo

二進制--->十六進制:

從右往左每4位合成一位。不足4位補0,0 1010 1011轉為8進制變為 0XAB


八進制--->二進制:

從右往左每一位拆分成3位二進制。253轉為010101011(看上圖)

八進制--->十進制:

從右往左,每位數值乘以8的(位數-1)次方,再求和

二進制、八進制、十進制、十六進制等互相轉換,Java演示demo

八進制--->十六進制:

先把八進制轉換為二進制,然後再轉換為十六進制。也可以先把八進制轉換為十進制,然後再轉換為十六進制。


十進制--->二進制:

十進制的1位為數值/2的1次方的餘數,2位為數值/2的2次方的餘數,3位為數值/2的3次方的餘數

二進制、八進制、十進制、十六進制等互相轉換,Java演示demo

十進制--->八進制:

十進制的1位為數值/8的1次方的餘數,2位為數值/8的2次方的餘數,3位為數值/8的3次方的餘數

二進制、八進制、十進制、十六進制等互相轉換,Java演示demo

十進制--->十六進制:

十進制的1位為數值/16的1次方的餘數,2位為數值/16的2次方的餘數,3位為數值/16的3次方的餘數

二進制、八進制、十進制、十六進制等互相轉換,Java演示demo


十六進制--->二進制:

從右往左每一位拆分成4位二進制。XAB轉為10101011

十六進制--->八進制:

先把十六進制轉換為二進制,然後再轉換為八進制。也可以先把十六進制轉換為十進制,然後再轉換為八進制。

十六進制--->十進制:

從右往左,每位數值乘以16的(位數-1)次方,再求和

二進制、八進制、十進制、十六進制等互相轉換,Java演示demo

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

"


分享到:


相關文章: