进制转换

r进制转十进制

类比对十进制的含义,可以很容易把r进制转换为十进制。

十进制:
75.3 = 7 \times 10^1 + 5 \times 10^0 + 3 \times 10^{-1}

r进制:
K_{\mathrm{n}} \ldots K_{1} K_{0} K_{-1} \ldots K_{-m}= K_{\mathrm{n}} \times r^{n}+\cdots+K_{1} \times r^{1}+K_{0} \times r^{0} +K_{-1} \times r^{-1}+\ldots+K_{-m} \times r^{-m}

除十进制外,其他进制在书写的时候要说明其进制或加对应后缀。

  1. 二进制。后缀B,例如1010B。
  2. 八进制。后缀O,例如753O。
  3. 十六进制。后缀H,例如4D3H。

十进制转r进制

十进制转r进制相当对上述r进制转十进制的公式做逆运算。

对于整数部分

\frac{K_{\mathrm{n}} \times r^{n}+K_{\mathrm{n}-1} \times r^{n-1}+\cdots+K_{1} \times r^{1}+K_{0} \times r^{0}}{r}=K_{\mathrm{n}} \times r^{n-1}+K_{\mathrm{n}-1} \times r^{n-2}+\cdots+K_{1} \times r^{0} \qquad \text{余数为} K_{0}

可见,只需逐次除r,每次的余数就是r进制数。

对于小数部分

\left(K_{-1} \times r^{-1}+K_{-2} \times r^{-2}+\ldots+K_{-m} \times r^{-m}\right) \times r=K_{-1} \times r^{0}+K_{-2} \times r^{-1}+\ldots+K_{-m} \times r^{-(m-1)}

可见,只需逐次乘r,每次的整数部分就是r进制数。

对于分数
\begin{array} {ll}11/32 &= (2^3+2^1+2^0)/2^5 \\&=2^{-2}+2^{-4}+2^{-5}\\&=0.01+0.0001+0.00001\\&=0.01011\end{array}

移位运算

100右移2位,为1,相当于除以 10^2
100左移1位,为1000,相当于乘以 10^1

对比10进制的移位,可以很容易得出r进制的移位规则:
右移n位相当于 \div r^n
左移n位相当于 \times r^n

在计算机中,有时机器码的最高位代表符号,所以按照是否考虑符号位分为两种移位:
算术移位:考虑符号位,符号位不参与移位。
逻辑移位:视作无符号数,全部移位。

算术移位时,负数的补码右移填1,负数的反码左移右移都填1.

c语言中,有符号数进行算术移位,无符号数逻辑移位,浮点数不能移位。

posted @ 2020-08-30 14:00:13
评论加载中...
发表评论