任意进制转换原理

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$