3.2 存储数字

数字在内存中的存储主要的问题:

  • 如何存储数字的符号

  • 如何显示小数

3.2.1 存储整数

整数是完整的数字,没有小数部分。整数通常采用定点表示法存储,小数点固定在最右边。

3.2.2 无符号表示法

  • 无符号整数只包括零和正数,范围是0到无穷大。

  • 计算机不能表示所有整数,通常定义一个最大无符号整数,值为2n12^n-1。n为此计算机中用于表示无符号整数的二进制位数。n位二进制数所能表示的数值范围是0 ~ 2n12^n-1

  • 超出存储单元位数的限制,称为溢出。

无符号表示法-存储,译解

存储:

  • 首先将整数变成二进制数。

  • 如果二进制位数不足n位,则在二进制数的左边补0,使它的总位数为n位;如果位数大于n,该整数无法存储。

例:将7存储在8位存储单元中,使用无符号表示法

7变为二进制:111  
左边补0:00000111

译解:

  • 二进制位模式转换为十进制的无符号整数

无符号表示法-溢出

试图存储超过2n12^n-1的数字,就会出现溢出。

无符号表示法-应用

无符号整数表示法可以提高存储的效率。一些不用到负数的情况都可以用无符号整数表示法。

  • 计数

  • 寻址

  • 其它不用负数的情况

3.2.3 符号加绝对值表示法

符号加绝对值表示法并不常用,在计算机中用于存储部分实数。

全部数据范围分为两个相等的子范围,前半个表示正整数,后半个表示负整数。最左位用于定义整数的符号。0表示正整数,1表示负整数。剩余位表示数字的绝对值。

0有+0和-0两种表示方法。

3.2.4 二进制补码表示法

几乎所有的计算机都是用二进制补码表示法来存储位于n位存储单元中的有符号整数。最左位表示符号,0代表非负数,1代表负数。

二进制补码表示法仅有一个0。

n位位模式分为两个相等的子范围

  • 第一个子范围表示非负整数,0 ~ 2n12^{n-1} - 1

  • 第二个子范围表示负整数,-2n12^{n-1} ~ -1

如果n=4:

二进制补码表示法 – 反码和补码运算

反码运算:反转各个位。

原模式:   0011 0110  
求反码:   1100 1001

补码运算:反码+1。

原模式:    0011 0110  
求反码:    1100 1001  
求补码:    1100 1010

对一个数,求两次反码可以得到原数。

对一个数,求两次补码可以得到原数。

二进制补码表示法 – 存储

存储步骤:

  • 将整数变成n位的二进制数。

  • 如果整数是正数或零,则原样存储;如果是负数,则求补码存储。

还原步骤:

  • 如果最左位为1,取补码;如果最左位为0,则无操作。

  • 将该整数转换为十进制。

二进制补码表示法 – 溢出

3.2.5 三种表示法比较