计算机里的进制转换
十进制整数转二进制
- 除 2 取余,逆序排列;先用整数除以
2
,得到商和余数,再用商除以2
,又得到商和余数,直到商的值等于 0,然后把余数逆序排列就得到二进制的形式
5
5/2 = 2 ... 1
2/2 = 1 ... 0
1/2 = 0 ... 1
// 101
十进制小数转二进制
- 整数部分和小数部分开转换,整数部分依照上面的规则,小数部分按照乘 2 取整,顺序排列的规则,用小数部分乘 2,得到的积取整数部分作为二进制的位数,积的小数部分再乘 2 又得到积,继续乘下去直到小数部分是 0;最后把两部分二进制用小数点连接起来即可
4.5
整数部分 4 ... 100
小数部分 0.5
0.5*2 = 1.0 ... 1
// 合并起来就是 100.1
0.1
整数部分 0 ...0
0.1*2 = 0.2 ... 0
0.2*2 = 0.4 ... 0
0.4*2 = 0.8 ... 0
0.8*2 = 1.6 ... 1
0.6*2 = 1.2 ... 1
0.2*2 = 0.4 ... 0
0.4*2 = 0.8 ... 0
0.8*2 = 1.6 ... 1
0.6*2 = 1.2 ... 1
// 0.000110011...
十进制转十六进制
先转二进制,然后每 4 位二进制转十进制,超过 10 的部分用[A,F]
代替,最后合并
47
10 1111
//每四位转10进制
2 F(15)
//合并
2F
二进制转十进制
采用乘 2 相加的方法,即每位二进制数,去乘以 2 的当前位索引的次方,然后相加;小数点左侧二级制位索引从 0 开始,小数点右侧二进制位索引从-1 开始
100.1;
(1 * 2) ^ (2 + 0 * 2) ^ (1 + 0 * 2) ^ (0 + 1 * 2) ^ -1 = 4 + 0 + 0 + 0.5 = 4.5;
- 所以二进制位数和表示的十进制最大值的关系如下,因为从 0 开始
- 二进制位数和能表示的十进制数的关系如下,因为从 0 开始
八进制转十进制
乘 8 相加法
0o1244;
(4 * 8) ^ (0 + 4 * 8) ^ (1 + 2 * 8) ^ (2 + 1 * 8) ^ 3 = 676;
十六进制转十进制
乘 16 相加
0xffff;
F = 15;
(15 * 16) ^ (0 + 15 * 16) ^ (1 + 15 * 16) ^ (2 + 15 * 16) ^ 3 = 2 ^
(16 - 1) = 65535;
二进制转八进制
- 从后往前每三位为一个单元转成十进制,缺位补 0,然后合并每个转换得到的十进制数字就是八进制形式
11001101
// 从后往前,缺位补0
101 5
001 1
011 3
// 315
二进制转十六进制
- 从后往前每 4 位为一个单元转成十进制,超过 10 的话,从 10 到 15 分别用
ABCDEF
表示
1111 1101 // FD