在两个补语中截断?

时间:2013-05-05 09:52:16

标签: c binary integer twos-complement truncation

我很难理解从unsigned转换为Two的Complement时截断是如何工作的。有人可以解释一下吗? (我的textook使用将4位值截断为3位值的示例,并说-1变为-1,但-5变为3)。

1 个答案:

答案 0 :(得分:5)

在四个二进制位上表示的

-1是:

1 1 1 1

( - 1总是表示为2的补码中的所有位1。)

在你的教科书中,“截断”只是用来表示(*)“切断最高位”:

  1 1 1

结果仍然包含所有位集,因此它仍然代表-1 - 这次是3位2的补码版本-1。

-5在4位的2的补码中表示为:

1 0 1 1

砍掉最高位:

  0 1 1

我们留下3位表示3.我们不能再得到-5的原因是-5的幅度太大而不适合3位格式。

当高阶位被截断时,具有较小幅度的数字(可以用3位表示)不变。数字从-4到3就是这种情况。

(*)请注意,通常“截断”意味着保留最高有效位并删除最低有效位,尤其是在浮点时,其中权重小于1的位在转换为整数时被擦除通过“截断”。在OP的书中选择单词是非常值得怀疑的,除非该书不是英文的,并且在翻译时单词不能完全映射到英语。