进制转换
R进制转十进制
R进制转十进制使用按权展开法,具体操作是将R进制的每一位数值使用$R^K$的形式表示,K表示该位与小数点的距离,当该位位于小数点左边,K表示该位和小数点之间间隔数字的个数,当该位位于小数点右侧,K是负数,其绝对值是该位与小数点之间数字个数加1
例如:
二进制 转 十进制 $$ 10100.01 = 1 \cdot 2^4 + 1 \cdot 2^2 + 1 \cdot 2^{-2} $$
七进制 转 十进制 $$ 604.01 = 6\cdot7^2+4\cdot7^0+1\cdot7^{-2} $$
十进制转R进制
十进制转R进制使用短除法
例如将94转换成二进制数
94 ÷ 2 = 47 余 0
47 ÷ 2 = 23 余 1
23 ÷ 2 = 11 余 1
11 ÷ 2 = 5 余 1
5 ÷ 2 = 2 余 1
2 ÷ 2 = 1 余 0
1 ÷ 2 = 0 余 1
将余数从后往前书写就是对应的二进制 1011110
二进制转八进制
二进制的 111 表示 八进制的 7,000表示八进制的0,二进制转换成八进制时,将二进制从低到高分为3个一组,高位不足三个的补0,分别进行转换
例如10001110转换成8进制为 216
010 001 110
2 1 6
二进制转十六进制
二进制的1111表示 十六进制的 15,0000表示十六进制的0,二进制转换成十六进制时,将二进制从低到高分为4个一组,高位不足三个的补0,分别进行转换,而在十六进制中10-15分别使用A-F进行表示
例如 1000 1110 转换成16进制为 8E
1000 1110
8 E
数据编码
原码
定义:
- 最高位(最左边的一位)为符号位:
0表示正数,1表示负数。 - 其余位为数值位:表示这个数的绝对值的二进制形式。
- 最高位(最左边的一位)为符号位:
示例:
-
+5->0000 0101(符号位0,数值是5) -
-5->1000 0101(符号位1,数值是5)
-
优点:非常直观,容易理解。
缺点:
定义:
- 正数的反码:与其原码相同
- 负数的反码:将其对应正数的原码按位取反(包括符号位,但结果依然是1表示负)。
示例:
+5的原码是0000 0101,所以它的反码也是0000 0101-5的反码:先取+5的原码0000 0101,然后所有位按位取反(0变1,1变0),得到1111 1010
优点:引入反码后,减法可以用加法来实现。因为
X - Y等价于X + (-Y)缺点:
定义:
- 正数的补码:与其原码相同。
- 负数的补码:将其对应正数的原码按位取反后,再加1
示例(8位):
+5的补码:0000 0101(和原码一样)
-5的补码:- 取
+5的原码0000 0101 - 按位取反得到
1111 1010(这一步得到的是反码) - 再加1,得到
1111 1011
- 取
核心优点:
定义:
- 在补码的基础上,将符号位取反
- 更通用的定义是:对一个数
X,将其加上一个固定的偏移值Offset(通常是2ⁿ⁻¹或2ⁿ⁻¹ - 1),然后再用二进制表示。
- 更通用的定义是:对一个数
- 在补码的基础上,将符号位取反
示例(8位,偏移量 Offset = 127)
+5:其补码是0000 0101。加上偏移量127后是132,132的二进制是1000 0100。-5:其补码是1111 1011。加上偏移量127后是122,122的二进制是0111 1010。
(如果采用“符号位取反”法:+5的补码是0000 0101,符号位取反得1000 0101;-5的补码是1111 1011,符号位取反得0111 1011。这种方法的结果与标准移码定义通常差1,但比较大小的特性一致)
核心优点:
便于比较:移码表示的所有数(正、负、零),其二进制的大小关系与它所代表的真值的大小关系是完全一致的。计算机可以直接用比较无符号整数的方式来比较移码的大小,速度极快。这对于浮点数运算中判断指数大小至关重要。数值表示范围
| 码制 | 定点整数 | 定点小数 |
|---|---|---|
| 原码 | $-(2^{n-1}-1)$ ~ $(2^{n-1}-1)$ | $-(1-2^{-(n-1)})$ ~ $(1-2^{-(n-1)})$ |
| 反码 | $-(2^{n-1}-1)$ ~ $(2^{n-1}-1)$ | $-(1-2^{-(n-1)})$ ~ $(1-2^{-(n-1)})$ |
| 补码 | $-2^{n-1}$ ~ $(2^{n-1}-1)$ | -1 ~ $(1-2^{-(n-1)})$ |
| 移码 | $-2^{n-1}$ ~ $(2^{n-1}-1)$ | -1 ~ $(1-2^{-(n-1)})$ |
浮点数的运算
浮点数表示
计算机中通常使用科学计数法的二进制实现,可以在固定长度的存储空间中表示极大范围、不同精度的实数。
浮点数表示:$N = 尾数 \cdot 基数 ^ {指数}$
例如 $3.14 \times 10^3$
例如 $3.14 \times 10^3 + 1.2 \times 10^5$
- 对阶,将两个数据的指数转换成相同的,小的往大的对
- $0.0314 \times 10^5 + 1.2 \times 10^5$
- 尾数计算
- $0.0314 + 1.2 = 1.2314$
- 结果格式化
- 尾数用补码,阶码用移码
- 阶码的位数决定数的表示范围,位数越多范围越大
- 尾数的位数决定数的有效精度,位数越多精度越大
- 对阶时,小数向大数看齐
- 对阶是通过较小数的尾数右移实现的