进制转换算法
1. 位值制计数法
数码
数中每个位置上的数,如 1,2,3,4
基数
每位数的数码可以有多少个,如10进制有0~9十个,比如基酒,有六种(威士忌、伏特加、龙舌兰、白兰地、金酒、朗姆)
位权
表示每位上1代表的数值大小,如十进制位数0,位权为10^0 = 1, 位数1 位权为10^1 = 10
2. 进制转换
2.1 二进制转十进制
数码*位权相加
10101111
2^7 + 2^5 + 2^4 - 1 = 175
2.2 二进制转八进制
没三个是一个八进制数码
10101111
010 101 111
2 5 7
2.3 二进制转十六进制
10101111
1010 1111
AF
2.4 十进制转二进制
29 / 2 ... 1
14 / 2 ... 0
7 / 2 ... 1
3 / 2 ... 1
1 / 2 ... 1
// 倒序排列
11101
....
3. 小数部分
// 类比十进制小数部分,小数后每一位数字位权都是前一位的十分之一
0.1245
1 x 10^-1 + 2 * 10^-2 + 4 * 10^-3 + 5 * 10^-4
// 二进制也类同,位权为前一位的二分之一
0.1101
1 * 2^-1 + 1 * 2^-2 + 0 * 2^-3 + 1 * 2^-4
3.1 二进制转十进制
// 同整数部分
0.11101
1 * 0.5 + 1 * 0.25 + 1 * 0.125 + 0 * 0.0625 + 1 * 0.03125 = 0.090625
3.2 十进制转二进制
0.85 * 2 = 1.7 1
0.7 * 2 = 1.4 1
0.4 * 2 = 0.8 0
0.8 * 2 = 1.6 1
0.6 * 2 = 1.2 1
0.2 * 2 = 0.8 1
...
发现无法除进
JDK进制处理
0b/0B... 二进制
0... 八进制
... 十进制
0x/0X 十六进制
// 前缀是0不是O
// 字母bx不区分大小写
// 在指定进制中使用规定数码
// 底层都是二进制存储
// JAVA默认都是使用十进制输出显示
// 可以指定进制输出
Integer.toBinaryString()
Integer.toOctalString()
Integer.toHexString()
// 或者
Integer.toString(val, radix2~36)
// 指定进制转换为十进制
parseInt(val, valRadix)/valueOf