数据在计算机的表示

 · 2022-9-3 · 次阅读


二进制的表示

整数的表示

表示范围(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 = 最高位产生的进位 异或 次高位产生的进位

对计算方法的理解:

溢出只可能有两种情况,即

  1. 两个正数相加发生溢出
  2. 两个负数相加发生溢出

对于第一种情况,两个操作数的最高位都应该是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既可以是有符号数也可以是无符号数。