yukki.cn / writing / post-20260920-164826
进位计数制及其相互转换
梳理进位计数制的位权原理,以及整数、小数在二、八、十、十六进制之间的转换方法。
进位计数制与位权
在 R 进制中:
- 基数为 R,每一位可使用 0∼R−1;
- 计数规则是“逢 R 进 1”;
- 同一个数字处于不同位置时,表示的实际大小不同。
例如,十进制数 357 可以写成:
357=3×102+5×101+7×100
其中 102、101、100 就是各位的位权。
对于一般的 R 进制数:
(anan−1⋯a1a0.a−1a−2⋯)R
其数值为:
anRn+an−1Rn−1+⋯+a0R0+a−1R−1+a−2R−2+⋯
重点: 小数点左边的指数从 0 开始向左递增;小数点右边的指数从 −1 开始向右递减。
常见进制
| 进制 |
英文名称 |
常见缩写 |
基数 |
可用数字 |
示例 |
| 二进制 |
binary |
bin |
2 |
0、1 |
(101101)2 |
| 八进制 |
octal |
oct |
8 |
0~7 |
(735)8 |
| 十进制 |
decimal |
dec |
10 |
0~9 |
(357)10 |
| 十六进制 |
hexadecimal |
hex |
16 |
0~9、A~F |
(2AF)16 |
bin、oct、dec、hex 常用作进制名称的简写;具体编程语言中的数字前缀写法可能不同。
十六进制中:
A=10,B=11,C=12,D=13,E=14,F=15
下标用于标明数的进制。例如,(1011)2=1110,但 (1011)10 仍表示十进制的一千零十一。
任意进制转换为十进制
方法是:按权展开,相加。
整数转换
例如,将 (2AF)16 转换成十进制:
(2AF)16=2×162+10×161+15×160=512+160+15=68710
小数转换
例如,将 (101.101)2 转换成十进制:
(101.101)2=1×22+0×21+1×20+1×2−1+0×2−2+1×2−3=4+1+21+81=5.62510
十进制转换为其他进制
整数部分和小数部分要分别处理:
| 部分 |
方法 |
数位排列顺序 |
| 整数部分 |
除基取余 |
余数逆序排列 |
| 小数部分 |
乘基取整 |
整数部分顺序排列 |
整数部分:除基取余,逆序排列
例如,将 4510 转换成二进制:
45÷222÷211÷25÷22÷21÷2======22余 111余 05余 12余 11余 00余 1
从下往上读取余数,可得:
4510=(101101)2
之所以要逆序,是因为第一次得到的余数对应最低位 20,之后才依次对应更高位。
转换为十六进制时,若余数大于 9,要改写为对应字母。例如:
687÷1642÷162÷16===42余 15=F2余 10=A0余 2
因此:
68710=(2AF)16
小数部分:乘基取整,顺序排列
例如,将 0.62510 转换成二进制:
0.625×20.25×20.5×2===1.25取 10.5取 01.0取 1
按出现顺序读取整数部分,可得:
0.62510=(0.101)2
若小数部分不能在有限次运算后变为 0,就根据题目要求保留指定位数,并进行截断或舍入。
整数与小数混合
分别转换后再拼接。例如:
1310=(1101)2,0.62510=(0.101)2
所以:
13.62510=(1101.101)2
二、八、十六进制之间的快速转换
因为 8=23、16=24,所以:
1 位八进制=3 位二进制
1 位十六进制=4 位二进制
二进制与八进制
| 八进制 |
二进制 |
八进制 |
二进制 |
| 0 |
000 |
4 |
100 |
| 1 |
001 |
5 |
101 |
| 2 |
010 |
6 |
110 |
| 3 |
011 |
7 |
111 |
八进制转二进制时,将每一位改写为 3 位二进制:
(572)8=(101 111 010)2=(101111010)2
二进制转八进制时,从小数点开始向两侧每 3 位分为一组。例如:
(11011)2=(011 011)2=(33)8
二进制与十六进制
| 十六进制 |
二进制 |
十六进制 |
二进制 |
| 0 |
0000 |
8 |
1000 |
| 1 |
0001 |
9 |
1001 |
| 2 |
0010 |
A |
1010 |
| 3 |
0011 |
B |
1011 |
| 4 |
0100 |
C |
1100 |
| 5 |
0101 |
D |
1101 |
| 6 |
0110 |
E |
1110 |
| 7 |
0111 |
F |
1111 |
十六进制转二进制时,将每一位改写为 4 位二进制:
(3AF)16=(0011 1010 1111)2=(1110101111)2
二进制转十六进制时,每 4 位分为一组:
(1101011011)2=(0011 0101 1011)2=(35B)16
含小数点时的分组规则
以小数点为中心,分别向左、向右分组:
- 整数部分最左侧不足一组时,在左边补 0;
- 小数部分最右侧不足一组时,在右边补 0。
例如,将 (101101.1011)2 转换成八进制:
(101 101.101 100)2=(55.54)8
补零不会改变数值,例如 (011)2=(11)2,(0.1)2=(0.100)2。
八进制与十六进制
通常以二进制为桥梁:
八进制⟷二进制⟷十六进制
例如:
(735)8=(111 011 101)2=(0001 1101 1101)2=(1DD)16
转换方法总结
| 转换类型 |
方法 |
| 任意进制 → 十进制 |
按权展开求和 |
| 十进制整数 → R 进制 |
除 R 取余,逆序排列 |
| 十进制小数 → R 进制 |
乘 R 取整,顺序排列 |
| 二进制 ↔ 八进制 |
3 位一组 |
| 二进制 ↔ 十六进制 |
4 位一组 |
| 八进制 ↔ 十六进制 |
借助二进制转换 |
易错点: 注意整数与小数的读取顺序相反;分组时,整数部分在左侧补 0,小数部分在右侧补 0;十六进制中大于 9 的数码要写成 A~F。