无符号数怎样编码?
- 位向量: 设 [xw−1,⋯,x0] 共 w 位;
- 编码规则:
B2Uw(x)=∑i=0w−1xi2i
- 取值范围: [0, 2w−1];
- 性质: 位模式与数值一一对应, 没有冗余编码;
补码怎样编码有符号数?
- 区别: 最高位权为负, 其余位与无符号数相同;
- 编码规则:
B2Tw(x)=−xw−12w−1+∑i=0w−2xi2i
- 取值范围: [−2w−1, 2w−1−1];
- 唯一零: 只有一种 0 的编码;
- 优势: 加减法可以直接复用无符号数的位级电路;
为什么补码的取值范围不对称?
- 位数固定: w 位只有 2w 个不同位模式;
- 零占用其中一个编码;
- 其余 2w−1 个编码分给正负两半, 负数一侧多一个;
- 结论: ∣TMinw∣=∣TMaxw∣+1, 即 −2w−1 没有对应的正数;
常用字长下的边界值是多少?
| 字长 w | UMaxw | TMinw | TMaxw | −1 的位模式 |
|---|
| 8 | 255 | -128 | 127 | 0xFF |
| 16 | 65535 | -32768 | 32767 | 0xFFFF |
| 32 | 4294967295 | -2147483648 | 2147483647 | 0xFFFFFFFF |
| 64 | 18446744073709551615 | -9223372036854775808 | 9223372036854775807 | 0xFFFFFFFFFFFFFFFF |
原码和反码为什么被淘汰?
- 原码: 最高位为符号位, 其余位按无符号数解释;
- 反码: 最高位权为 −xw−1(2w−1−1), 其余位与补码相同;
- 缺陷:
+0 与 -0 的编码不同, 浪费一个位模式并引入判零分支;
- 转换: 原码按位取反得反码, 反码最低位加 1 得补码;