1.2.5 二进制与数字的表示
计算机最早发明时的主要用途就是数学计算,数字在计算机中是以二进制数的形式存储和参与计算的。
1. 机器数
在计算机中采用固定数目的二进制位数来表示数字,称为机器数。机器数的表示范围受计算机字长的限制,一般字长为8、16、32或64位,如果数值超出机器数能表示的范围,就会出现“溢出”错误。本节假设计算机使用8位字长表示数字。
数值有正、负之分,通常把一个二进制数的最高位作为符号位。规定“0”表示正数,“1”表示负数,如图1-15所示。

图1-15 机器数
【例1.7】 整数+11和−11对应的机器数是多少?
整数11对应的二进制数是1011,因此+11的机器数是00001011;−11的符号为负号,第8位为1表示负数,因此−11对应的机器数是10001011。
在计算机中,数字可以采用原码、反码、补码存储和处理,不同的编码有不同的计算规则。
2. 原码
原码是数字最简单的表示方法。用0表示正号、1表示负号,数值部分为真值的绝对值(真值为机器数所代表的数)。0的原码有两种表示方法。

3. 反码
正数的反码与原码相同,负数的反码由原码的数值部分按位取反得到(即0变为1,1变为0)。0的反码有两种表示方法。

4. 补码
正数的补码与原码、反码相同,负数的补码等于负数的反码加1。

0有唯一的补码,[+0]补=[−0]补=00000000。−0的补码为100000000(8个0),受8位字长限制,最高位1在运算过程中,由于没有电子元器件表示而丢失,从而使保留下来的结果恰好与+0的补码一致。
在现代计算机系统中,为了有符号数值的存储和计算,数值一律采用补码来表示和存储。原因在于,使用补码可以将符号位和数值域统一处理;同时,加法和减法也能统一处理,可以将减法运算转变为加法运算。此外,补码与原码相互转换,其运算过程是相同的。