【问题标题】:2'complement for negative numbers2' 负数的补码
【发布时间】:2018-04-05 19:23:24
【问题描述】:

假设我们有 4 位来表示一个带符号的数字,所以总共 2^4 = 16 个数字(使用 2 的补码方法)。范围是 -8 到 +7。 我看到的范围是从-7到+7。如果第一位都是关于符号的,它怎么代表一个量级? 例如:

为了代表-7,我们首先从+7开始 第一位代表符号其他幅度

+7=0111(0 表示 +ve 号)

找到它的 2 的补码 (-7)

-7=(1000+1)=1001(1 为负数)

所以我们不需要 5 位来表示 -8,因为第 1 位将表示符号 喜欢

首先,+8=01000(0 代表 +ve)

其 2 的补码为 -8=(10111+1)=(11000) (1 为负数) 为什么-8只有1000。(那不是1个符号位) 为什么这个标志也表示大小?谢谢!

【问题讨论】:

  • 2 的补码不是“符号位”和“幅度位”;那将是符号和大小。第一位被称为符号位这一事实并不意味着它应该对幅度没有影响。

标签: numbers signed twos-complement


【解决方案1】:

正如 cmets 中所述,符号位不能确保对幅度没有影响。你自己说过 2^4 = 16 个数字。假设每个数字都是正数,这将是从 0 到 15 的范围。当您使用第一位作为符号位时,它仍然有 16 个不同的值,但范围更改为 -8 到 7。同时实现 1000 的二进制补码是 1000,这意味着在 16 位数字中永远不能有正八范围。

这应该可以回答您的问题,但如果您想实现某些目标,请更具体地说明。

【讨论】:

  • 所以如果我有 5 位来表示 +8,这将是 01000(MSB 0 表示符号和其他幅度)和 5 位来表示 -8 不会与 01000 相同只需要 4 位(1000)并且 MSB 将只是 0,因为 1000 已经代表 -8 ..这让我感到困惑。?
  • 所以再深入一点,+8 等于 01000。现在取该数字的 2 的补码,你会得到 10111+1=11000,保持符号位与其性质相符。这就是为什么在处理符号位时,4位最多只能表示+7
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-02-28
  • 1970-01-01
  • 1970-01-01
  • 2013-09-04
  • 1970-01-01
  • 2012-06-18
  • 2011-11-24
相关资源
最近更新 更多