二进制的表示
整数的表示
表示范围(n+1位二进制) | 最大的数 | 最小的数 | 0的表示 | |
---|---|---|---|---|
无符号整数 | $ 0 \leq x \leq 2^{n+1}-1 $ | 1111 1111 | 0000 0000 | 0000 0000 |
原码 | $ -(2^n-1) \leq x \leq 2^n-1 $ | 0111 1111 | 1111 1111 | 0000 0000 1000 0000 |
反码 | $ -(2^n-1) \leq x \leq 2^n-1 $ | 0111 1111 | 1000 0000 | 0000 0000 1111 1111 |
补码 | $ -(2^n) \leq x \leq 2^n-1 $ | 0111 1111 | 1000 0000 | 0000 0000 |
移码 | $ -(2^n) \leq x \leq 2^n-1 $ | 1111 1111 | 0000 0000 | 1000 0000 |
定点小数的表示
表示范围(n+1位二进制) | 最大的数 | 最大的数 | 0的表示 | |
---|---|---|---|---|
原码 | $ -(1-2^{-n}) \leq x \leq 1-2^{-n} $ | 0111 1111 | 1111 1111 | 0000 0000 1000 0000 |
反码 | $ -(1-2^{-n}) \leq x \leq 1-2^{-n} $ | 0111 1111 | 1000 0000 | 0000 0000 1111 1111 |
补码 | $ -1 \leq x \leq 1-2^{-n} $ | 0111 1111 | 1000 0000 | 0000 0000 |
硬件运算
标志位
OF(Overflow Flag)
含义:有符号数加减运算是否发生了溢出,当OF=1时,发生了溢出
计算方法:OF = 最高位产生的进位 异或 次高位产生的进位
对计算方法的理解:
溢出只可能有两种情况,即
- 两个正数相加发生溢出
- 两个负数相加发生溢出
对于第一种情况,两个操作数的最高位都应该是0,但是相加之后变成了1,未发生进位
对于第二种情况,两个操作数的最高位都应该是1,但是相加之后变成了0,未发生进位
这个模型刚好可以使用异或模型进行刻画。
SF(Signal Flag)
含义:有符号数加减运算结果的正负,SF为0表示正,SF为1表示负
计算方法:SF = 最高位的本位和
对计算方法的理解:运算结果的最高位
ZF
含义:标识运算结果是否为0,ZF = 1表示运算结果为0
硬件的计算方法:当运算结果的n位bit全部为0时,ZF = 1
CF
进位/借位标志,标识无符号数的加减法是否发生了进位或者借位,当CF = 1时,发生了进位或者借位,即发生了溢出
硬件的计算方法:CF = 最高位产生的进位 异或 sub,sub = 减法 ? 1 : 0
注意:OF和SF仅针对有符号数,CF仅针对无符号数,ZF既可以是有符号数也可以是无符号数。