本文总结计算机中信息的表示和处理方法。

2 信息的处理和表示

2.1 信息的存储

2.1.0 数字的编码

2.1.0.1 无符号数

无符号数是基于传统的二进制标识法,可以表示大于等于0的数字。

2.1.0.2 二进制补码(two’s-complement)

二进制补码用来表示有符号整数的常见形式。

2.1.0.3 浮点数

浮点数是以二进制为基数的实数科学计数法形式。

2.1.1 进制转换

2.1.1.1 十进制的转换

十进制转换为其他进制的方法均使用辗转相除法即可。例如: 一个十进制数x要转换为十六进制数,可以表示为:x = q * 16 + r 。然后通过q反复进行这个过程,直到q为0为止。

2.1.1.1.1 十进制转十六进制

例如:

q subprocess r
314156 = 19634 * 16 + 12 (C)
19634 = 1227 * 16 + 2 (2)
1227 = 76 * 16 + 11 (B)
76 = 4 * 16 + 12 (C)
4 = 0 * 16 + 4 (4)

最终得到结果:314156 = 0x4CB2C。

2.1.1.1.2 十进制转二进制

例如:

q subprocess r
29 = 14 * 2 + 1 (1)
14 = 7 * 2 + 0 (0)
7 = 3 * 2 + 1 (1)
3 = 1 * 2 + 1 (1)
1 = 0 * 2 + 1 (1)

最终得到结果:29 = 11101。

2.1.1.2 十六进制的转换

2.1.1.2.1 十六进制转十进制

十六进制数转换为十进制数,只需要将对应的十六进制位乘以16的幂,然后相加即可。例如: $ 0xACB = 10 * 16^2 + 12 * 16^1 + 11 * 16^0 = 10 * 256 + 12 * 16 + 11 = 2763$

2.1.1.2.2 十六进制转二进制

十六机制和二进制之间的对应关系如下: 每位十六机制数对应4bit二进制。可以使用如下两种方法进行转换。

  1. 方法1:切分法。即使用如下对照表进行转换即可。
Hex Bin Hex Bin
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

例如: 针对0x2DFB,转换方法如下:
2 -> 0010
D -> 1101
F -> 1111
B -> 1011
因此0x2DFB(H) = 0010 1101 1111 1011(B)

  1. 方法2:先将十六机制转换为十进制,然后再将十进制转换为二进制。
    十六进制转换为十进制的方法见2.1.1.2.1节。
    十进制转换为二进制的方法见2.1.1.1.2节。

温馨提示:推荐使用方法1,简单快捷。

2.1.1.3 二进制的换换

2.1.1.3.1 二进制转十进制

二进制转换为十进制的方法和十六进制转换为10进制的方法类似。例如:
$ 1111 1011 $
$ = 1 * 2^7 + 1 * 2^6 + 1 * 2^5 + 1 * 2^4 + 1 * 2^3 + 0 * 2^2 + 1 * 2^1 + 1 * 2^0 $
$ = 1 * 128 + 1 * 64 + 1 * 32 + 1 * 16 + 1 * 8 + 0 * 4 + 1 * 2 + 1 * 1 $
$ = 128 + 64 + 32 + 16 + 8 + 0 + 2 + 1 $
$ = 251 $

2.1.1.3.2 二进制转十六进制

二进制转换为十六进制的方法为十六进制转换为二进制的逆过程,方法参考2.1.1.2.2节。
唯一需要注意的地方就是:
若使用切分法二进制转换为十六进制的时候,需要从右往进行切分,每4bit二进制对应一位十六进制数。不足4位的在左侧补0。
例如:针对二进制数1 1010 1001 0001

  1. 先将二进制数的数位补为4的整数倍。1 1010 1001 0001 -> 0001 1010 1001 0001
  2. 按照对照表进行转换:
    0001 -> 1(H)
    1010 -> A(H)
    1001 -> 9(H)
    0001 -> 1(H)
  3. 最终得到结果为: 1 1010 1001 0001 = 0x1A91(H)

2.2 整数的表示

2.3 整数的运算

2.4 浮点数

2.5 总结