定点数的移位运算
算数移位
码值 | 填补代码 | |
正数 | 原码、补码、反码 | 0 |
负数 | 原码 | 0 |
补码 | 左移补0 | |
右移补1 | ||
反码 | 1 |
- 负数的原码数值部分与真值相同,故在移位时只要使符号位不变,其余空位补0。
- 负数的反码各位除符号位外与负数的原码相反,故移位之后所添加的代码也应与原码相反,即补1。
逻辑移位
- 逻辑移位将操作数当做无符号数看待,移位规则:逻辑左移,高位丢掉,低位补0;逻辑右移,低位丢掉,高位补0。
定点数加减法
原码定点数加减法
加法规则:先判断符号位,如果相同,绝对值相加,结果符号位不变;若不同,则做减法,绝对值大的减去绝对值小的,符号位是绝对值大的。
减法规则:将减数符号位取反,然后将被减数与符号位取反后的减数进行原码加法运算。就是减去一个数相当于加上这个数的相反数。
补码定点数加减法
- 参与运算的两个数都用补码表示。
- 按二进制运算规则运算,逢二进一。
- 符号位与数值位按照同样规则一起参与运算,符号位产生的进位要丢掉,结果的符号位由运算得出。
- 若做加法,则两数的补码直接相加;若做减法,被减数的补码和减数的机器负数的补码相加。
溢出的判断
溢出是指运算结果超过了数的表示范围,仅当两个符号相同的数相加,或者两个负号相异的数相减才可能产生溢出,如两个正数相加,结果的负号位为1;一个负数减去一个正数,符号位为0,这些都溢出了,运算结果是错误的。
检测溢出有三种方式:
- 一位符号位:两个数符号相同,结果又与原操作数符号不同,则结果溢出。
- 双符号位:双符号位不同则溢出,双符号位相同则不溢出。
- 符号位和最高数值位的进位:如果符号位和最高数值位都有进位或者都没有进位,则不溢出,否则溢出。
乘法运算
除法运算