计算机数的表示

计算机要处理的数

  • 无符号数
  • 有符号数 : 机器数
    • 原码
    • 反码
    • 补码

用8位二进制数来表示无符号数及有符号数的原码、反码、补码时的对应关系

无符号数

无符号数通常表示一个数的绝对值, 即数的各位都用来表示数值的大小.

一个字节(8位)二进制数只能表示 0~255 范围内的数, 要表示大于 255 的数,必须采用多字节表示, 它的长度可以为任意倍字节长.

数据格式

无符号二进制数表示格式


有符号数

有符号数, 即用来表示一个任意位长的整数或负数.

一般用一个数的最高位来表示符号位, 其余位为数值位:

0 : 表示 正号
1 : 表示 负号

有符号二进制数表示格式

原码

原码表示数的方法很简单,只需要在真值的基础上,将符号位用数码“0”和“1”表示即可.

反码

正数的反码与原码相同,而负数的反码则是在原码的基础上,符号位不变(仍为1),其余数位按位求反,即0→1,1→0。

补码

如果是正数,补码同原码也同反码,如果是负数,则在反码的基础上最末位加1。

注:补码中0只有一种表示,无正负之分,

补码特性:

[[X]补]补=[X]原

补码运算

两个用补码表示的带符号数进行加减运算时,特点是把符号位上表示正负的“1”和“0”也看成数,与数值部分一同进行运算,所得的结果也为补码形式,即结果的符号位为“0”,表示正数,结果的符号位为“1”表示负数。

两个带符号的数X和Y进行相加时,是将两个数分别转换为补码的形式,然后进行补码加运算,所得的结果为和的补码形式。即:

[X+Y]补=[X]补+[Y]补

两个带符号的数X和Y进行相减时, 求[X-Y]补,可以用[X]补和[-Y]补相加来实现。这里关键在于求[-Y]补。如果已知[Y]补,那么对[Y]补的每一位(包括符号位)都按位求反,然后再在末位加1,结果即为[-Y]补。(证明从略)。一般称[-Y]补为对[Y]补的“变补”,即[[Y]补]变补=[-Y]补;已知[Y]补求[-Y]补的过程叫变补。

[X-Y]补=[X+(-Y)]补=[X]补+[-Y]补

减数(补码)变补与被减数(补码)相加