Banson's Blog
补码表示法

补码是什么

补码是整数的表示方法

定义

集合$M\subseteq \mathbb N ,L\subseteq \mathbb Z$,$M$(Machine)集合是整数的机器表示(十进制),$L$(Logical)集合是被表示的整数。

假设讨论的是$w$位整数,那么:$\forall m \in M,m \in [0,2^w-1]$,$\forall l \in L , l \in [-2^{w-1},2^{w-1}-1]$。定义函数 $$ f\colon M \to L,f(x)= \begin{cases} x& 0 \leq x\leq 2^{w-1}-1\\
x-2^w & 2^{w-1} \leq x \leq 2^w-1 \end{cases} $$

经过推导,它的反函数 $$ f^{-1}\colon L \to M,f^{-1}(x)= \begin{cases} x+2^w& -2^{w-1} \leq x\leq -1\\
x& 0 \leq x \leq 2^{w-1}-1 \end{cases} $$

可以看出,$f$是一个双射,即对应法则$f$给出了从机器表示的数到逻辑上的数的一一对应。

如何理解

补码是一种对应关系,仅此而已。补码通过一个双射使得机器表示的数(非负)和一定范围内的整数(有正有负)一一对应了起来。不要把二进制表示的最高位看作符号位而割裂开来。最高位为1代表负数仅仅是一种刻意设计的巧合。

补码表示的奇妙性质

计算相反数

已知$a \in L,f^{-1}(a) \in M$,对$a$的正负进行简单讨论可以得到: $$f^{-1}(-a)=2^w-f^{-1}(a)$$


Last modified on 2020-05-14