补码表示法
补码是什么
补码是整数的表示方法。
定义
集合$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