任意进制转换原理
2024-08-22 22:58:59
R 进制,逢 R 进 1。
十进制数 56,表示为 $(56)_{10}$
八进制数 42,表示为 $(42)_8$
对于任意一个 R 进制数,它的每一位数值等于该位的数码乘以该位的权数。权数由一个幂 $R^k$ 表示,即幂的底数是 R,指数为 k,k 与该位和小数点之间的距离有关。当该位位于小数点左边,k 值是该位和小数点之间数码的个数,而当该位位于小数点右边,k 值是负值, 其绝对值是该位和小数点之间数码的个数加 1。
十六进制会用到字母 a b c d e f,分别表示十进制的 10 到 15。
例如,十进制数 1234.56,其数值可计算如下:
34.56=1×10^3+2×10^2+3×10^1+4×10^0+5×10^{-1}+6×10^{-2}$
例如,二进制数 10100.01 的值可计算如下:
100.01=1×2^4+1×2^2+1×2^{-2}$
先记几个特殊值
* $(11)_2$ -> $(3)_{10}$
* $(111)_2$ -> $(7)_{10}$
* $(1111)_2$ -> $(15)_{10}$
熟悉特殊值后,如果二进制中只有少量 0 时,就很容易快速把二进制转为10进制
例如
$(1011)_2$ 就是 15 减去 ^2$,结果为 $(11)_{10}$
十进制数转换为 R 进制最常用的是“除以 R 取余法”。
例如,将十进制数 94 转换为二进制数:
|\underline{94}$ …… 0
|\underline{47}$ ……1
|\underline{23}$ …… 1
|\underline{11}$ …… 1
|\underline{5}$ …… 1
|\underline{2}$ …… 0
$ 1$ …… 1
将所得的余数从低位到高位排列$(1011110)_2$ 就是 $(94)_{10}$ 的二进制数。
二进制数与八进制数、十六进制数之间的转换
* 将二进制数转换为八进制数,只有将每 3 个二进制数转换为八进制数即可
* 将二进制 数转换为十六进制数,只要将每 4 个二进制数转换为十六进制数即可
* 将八进制数转换为二 进制数,只要将每个八进制数转换为 3 位二进制数即可
* 将十六进制数转换为二进制数, 只要将每个十六进制数转换为 4 位二进制数即可
上面的转换都是以小数点作为计算数码 个数的起点。八进制数和十六进制数转换可先转换为二进制数,然后再转换为目标进制。
$(1011101)_2$ 转为 八进制
```
1 011 101
1 3 5
```
$(1011101)_2$ 转为 八进制结果是$(135)_8$
$(1011101)_2$ 转为 十六进制
```
101 1101
5 13
```
$(1011101)_2$ 转为 十六进制结果是 $(5d)_{16}$
$(5d)_{16}$转为十进制
\times16^1 + 13\times16^0$ 结果为 $(93)_{10}$
小数部份如何转二进制:
小数 0.75 转二进制
```
// 乘以 2 取出整数部分,将小数点后的继续乘以 2
0.75 * 2 = 1.5 1
0.5 * 2 = 1.0 1
没有小数部份了,结束。
```
所以 0.75 的二进制表示为 $(0.11)_2$
5.8125 转为二进制
整数部份 5 的二进制是 $(101)_2$,下面看小数部份:
```
0.8125 * 2 = 1.625 1
0.625 * 2 = 1.25 1
0.25 * 2 = 0.5 0
0.5 * 2 = 1.0 1
```
最终结果是 $(101.1101)_2$ ,验算:
$ = 1\times 2^2 + 1 \times 2^0 + 1 \times 2^{-1} + 1 \times 2^{-2} + 1 \times 2^{-4}$
$= 4 + 1 + \frac{1}{2} + \frac{1}{4} +\frac{1}{16} $
$= 5.8125$