CSAPP3e第二章(整数的表示)
整数的表示(第二章 Part1)
博客还没装 Mathjax 插件,所以下面的 \(\LaTeX\) 应该都是乱的 已修
整数表示
这一段如果没有目的和顺序地硬看会觉得关系很多很复杂,但其实只要按照一定的目的和顺序结构就会很清晰。
以设计者的视角思考如何设计
如果我们是设计用二进制表示整数的人,我们需要如何表示二进制?
利用 \(w\) 位二进制的最高位 $ x_{w-1} $ 为 \(1\) 代表这个数是负数,剩下的部分正常用二进制表示即 \(\displaystyle\sum_{i=0}^{w-2}x_i\cdot2^i\)
但显然光表示是完全不够的,我们还需要运算,而符号位由于不对具体数值做贡献,会导致运算错误。
因此我们需要让符号位也代表数值,用另一种映射方式计算,于是我们令最高位的符号位具有负的权重
\(-x_{w-1} \cdot
2^{w-1}\),这样符号位也参与了计算。但是这样数值又对不上了,因此我们需要把后面的位也变一下。由于我们不是真的设计师,所以我们直接看答案:取反后面的每一位后再
+1。例如10010除符号位取反后变为11101,
+1后是11110。这样的表示方法计算出的数值是 \(-x_{w-1}\cdot2^{w-1}+\displaystyle\sum_{i=0}^{w-2}x_i\cdot2^i\)
如何论证这样的数值是”对”的呢?