编码进阶

$0$ 相关

  1. $0$ 有唯一表示: 只有 补码 & 移码
    1. $\Rightarrow$ “+0” “-0” 排除移码补码
  2. $[0]_{补}=00000000$
  3. $[0]_{移}=10000000$

范围

编码 下界 上界 数据数
原码 $-2^{k-1}+1$ $2^{k-1}-1$ $2^{k}-1$ ($\because$ 重复 $\pm 0$)
补码 $-2^{k-1}$ $2^{k-1}-1$ $2^{k}$
移码 $-2^{k-1}$ $2^{k-1}-1$ $2^{k}$
边界数表示

以 $k=8$ 位编码为例

  • 补码
    • Max = $[2^{k-1}-1]{补}=[127]{补}=0111_1111$
    • Min = $[-2^{k-1}]{补}=[-128]{补}=1000_0000$
  • 移码
    • Max = $[2^{k-1}-1]{移}=[127]{移}=1111_1111$
    • Min = $[-2^{k-1}]{移}=[-128]{移}=0000_0000$

类型转换

C-style 类型转换:

  • 不改变数据 ❎

  • 只改变解释 ✅

  • 长改短 $\Rightarrow$ 截断

  • 短改长 $\Rightarrow$ 扩展

    • 有符号 $\Rightarrow$ 算术扩展
    • 无符号 $\Rightarrow$ $0$ 扩展

算术等价

以 $k=8$ 位编码为例

  1. $\sim A=1111_1111-A$
  2. $[1.A]_{补}=1.(\sim A + 1)$