【问题标题】:Truncation in Two's Complement? [closed]二进制补码中的截断? [关闭]
【发布时间】:2013-04-29 07:09:46
【问题描述】:

我很难理解从无符号转换为二进制补码时截断的工作原理。有人可以解释一下吗? (我的 textook 使用了将 4 位值截断为 3 位值的示例,并说 -1 变为 -1,但 -5 变为 3)。

【问题讨论】:

  • 这取决于您是否有无符号值、有符号值等...您有示例吗?
  • 在不知道您的教科书如何解释的情况下,是什么让您认为这里的任何解释可能更清楚?我什至不清楚您所说的“截断”是什么意思。如果该值是无符号的,那么在您的示例中,源如何是 -1 或 -5 - 它们都是有符号值?
  • 我认为@Pascal Cuoq 在理解和回答您的问题方面做得很好,但如果这确实是答案,这不是“无符号到二进制补码”转换的问题,而是从较大的二进制补码到较小的二进制补码类型的转换之一 - 在本例中为 4 位到 3 位。无论哪种方式,这都不是真正的“转换”,而仅仅是对位模式的重新解释。

标签: c binary integer twos-complement truncation


【解决方案1】:

-1 表示在四个二进制位上是:

1 1 1 1

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

在您的教科书中,“截断”仅用于表示(*)“切断最高位”:

  1 1 1

结果仍然有它的所有位集,所以它仍然表示 -1 - 这一次是 -1 的 3 位 2 的补码版本。

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

1 0 1 1

砍掉最高位:

  0 1 1

我们只剩下 3 的 3 位表示。我们无法再得到 -5 的原因是 -5 的幅度太大而无法适应 3 位格式。

当高位被砍掉时,可以用 3 位表示的幅度较小的数字不会改变。从 -4 到 3 的数字就是这种情况。

(*) 请注意,通常“截断”意味着保留最高有效位并删除最低有效位,尤其是在浮点上下文中,当转换为整数时,权重小于 1 的位会被擦除通过“截断”。 OP 书中的单词选择非常令人怀疑,除非这本书不是英文的,而且翻译时单词与英文不完全对应。

【讨论】:

  • 这也许对这个相当模糊的问题有意义,但它是 4 位二进制补码到 3 位二进制补码转换(或更确切地说是解释),而不是“无符号到二进制补码转换”。这可能是@girlrockingguna 困惑的根源。
  • @Clifford 我同意你的观点,“-5 unsigned”并不容易确定要问的内容。
  • 我不确定截断是否严格定义为“切断最高位”?至少我倾向于认为它曾经意味着切断 lower 位(例如,在处理数字音频时)。我认为这个词可能是上下文相关的,如果不限定要删除的位,可能会模棱两可。如果 OP 删除了低位,他们会看到不同的结果。
  • @underscore_d 你是对的,问题和我的答案都必须收紧词汇才能对未来的访问者有用。我不确定它是否值得,或者是否应该删除它。
  • @underscore_d 我添加了一个突出的警告。
猜你喜欢
  • 2012-11-23
  • 1970-01-01
  • 1970-01-01
  • 2016-04-23
  • 1970-01-01
  • 2010-12-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多