1、符号数与无符号数的人为规定性:
一个数,是有符号数还是无符号数都是人为规定的。进行二进制运算时用无符号数或是补码运算时,结果都是正确的。
10000100+00001110=无符号数即 132+14=146(d)
若规定为符号数则为-124+14=-110而[-110]补=10010010
2、补码加减法运算
计算机中,当确定为符号数运算时,符号数一律用补码表示,运算时符号位和数字位一起参加运算。同样,运算结果也用补码表示。
1)两符号数相加公式X+Y:
[X+Y]补=[X]补+[Y]补
2)两符号数相减公式X-Y:
[X-Y]补=[X]补+[-Y]补
3)溢出及符号数的扩展
溢出:当两个正数相加或两个负数相加运算结果超过了补码所能表示的数值范围称为溢出。以标志OF(溢出标志位)表示是否溢出。
不溢出(OF=0),说明运算结果正确。
溢出(OF=1),说明运算结果错误。
判断方法:
- 异号数相加或同号数相减不会溢出(OF=0)。
- 同号数相加或异号数相减时有可能发生溢出。
OF=AnBnSn+AnBnSn
OF:代表溢出;An、Bn分别代表两个加数符号位,Sn代表结果的符号位。
解决办法:增加符号数的位数,一般采用字节(8位)的倍数,即8位、16位、24位等。正数的补码,其扩展粒数全部加0,原为负数的补码,其扩展的位数全部加1。