跳到主要内容

计算机里的进制转换

十进制整数转二进制

  • 除 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 开始

image-20200630083700645

  • 二进制位数和能表示的十进制数的关系如下,因为从 0 开始

image-20200630083642451

八进制转十进制

乘 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