2 信息的表示与处理
现代计算机存储与处理的信息全部由二值信号,0 与 1 表示。单个的 0 与 1 被称为位(bit)。这些单个的 bit 并不是怎么有用,但将许多 bit 组合到一起,再赋予某种解释,便能表示任意有限集合的元素。本章就将考察在当前的计算机系统中,这些 bit 是如何组合到一起表示各种信息的。特别的,我们着重研究如何表示数字。
我们将研究三种最重要的数字表示:无符号(unsigned)数、补码(Two's-complement) 与 浮点数(Floating Number)。无符号数基于传统的二进制表示非负数;补码是表示有符号整数最常见的方式;浮点用于表示实数在以 2 为基数的科学表示法下的 近似值。考察如何在这些表示方法下实现算术运算,与这种实现带来的诸多现象。其中最经典的一个现象是 溢出(Overflow),其指代运算结果太大不能使用有限的 bit 表示时发生的现象。我们也会注意到浮点运算是 不可结合 的。
研究这些表示方法对于保证编写的程序可以在多种机器、系统或编译器上运行且具有相同的行为,避免某些基于数值运算的严重漏洞具有重要的意义。同时也为 3 程序的机器级表示 中阅读机器指令做好准备。
为了保证介绍内容的通用性与严谨性,本章所讲解的内容不会局限于特定的机器字长,且会包含大量数学符号推导。
为了深刻理解本章介绍的几种编码方式为何具有某些良好的性质,最终理解这些形式化的推导是十分有必要的。但是纯符号化的推导在很多情况下十分让人生畏,因此当需要对某些性质进行介绍时,你会遇到如下的折叠栏:
这里将展示严谨的数学推导
所有“硬核模式”栏初始处于折叠状态,正文将展示某些性质或定理的口语化说明或实际例子。展开该折叠栏将展示严谨的数学符号推导。
下面罗列了本章用到的所有符号及其定义供统一查阅:
2.1
代表一个 进制表示为 的数。 - ~,
代表非。 - &,
代表与。 - |,
代表或。 - ^,
代表异或。 代表 位位向量 的位级表示。
本章包含四节: