转换时位模式会变化吗?
- 结论: 不变, 改变的只是对同一串位的解释方式;
- 后果: 数值可能改变, 位级表示保持原样;
- 隐式转换: 有符号数与无符号数混合运算时, 有符号数会被隐式转成无符号数;
补码怎样转成无符号数?
- 对满足 TMinw≤x≤TMaxw 的 x:
T2Uw(x)={x+2w,x,x<0x≥0
- 直觉: 负数整体上移 2w, 映射到无符号域的后半段;
无符号数怎样转成补码?
- 对满足 0≤u≤UMaxw 的 u:
U2Tw(u)={u,u−2w,u≤TMaxwu>TMaxw
- 直觉: 大于 TMaxw 的值整体下移 2w, 落到负数区间;
扩展位宽时补 0 还是补符号位?
- 无符号数: 零扩展, 高位补 0;
- 补码: 符号扩展, 高位补符号位;
- 原因: 只有补符号位才能保持数值不变; 对负数补 0 会把它变成一个大正数;
截断高位会得到什么?
- 无符号数: x′=xmod2k, 即丢弃高位、保留低 k 位;
- 补码: x′=U2Tw(xmod2k);
- 结论: 截断等价于取模, 位模式唯一确定, 但数值可能改变;