【问题标题】:9 bit memory location - sign and magnitude9 位内存位置 - 符号和大小
【发布时间】:2014-01-15 13:27:42
【问题描述】:

所以我尝试使用符号和大小在 9 位内存位置表示数字 -256。

我的想法是对的吗,没有代表它?

例如,使用 +256,我看不出负数如何适合我下面的内容:

+256 = 256 128 64 32 16 8 4 2 1
        1   0  0   0  0 0 0 0 0

我认为 -256 对于 9 位系统来说太大了?

非常感谢

【问题讨论】:

  • 我以为他们几十年前就停止制造 9 位系统了!
  • +256 也太大了,如果你的幅度只有 8 位的话。
  • 抱歉忘记在左边添加256列

标签: decimal sign negative-number


【解决方案1】:

抱歉,我没有完全理解您的设置。我会回答一点“周围”。

如果你的“位布局”很简单:

  9      8       7         6        5           1        0
sign rawvalue rawvalue rawvalue rawvalue ... rawvalue rawvalue

那么用 1+8 位你可以有值:

-255 -254 ... -2 -1 -0 +0 +1 +2 ... +254 +255

因为边缘情况是:

 111111111  ... 100000000 000000000 ... 011111111
   (-255)          (-0)     (+0)          (+255)

请注意,在这种纯编码中,没有这样的东西 +256。它是+0。当然,您可以使用一些智能代码来解决它,但在基本思想中,它实际上是 +0,因为最左边的 1 感觉到“符号”位并且原始值为 0。

请注意,数学上 -0 == +0 但它们有不同的符号。这是一个值的浪费,也使数学运算复杂化。这是引入 双补码 系统的其他原因之一,它允许您使用范围为

的值
   -256    ...    -2        -1         0        +1        +2     ...   +255
100000000 ... 111111110 111111111 000000000 000000001 000000010 ... 011111111

在二进制补码系统中,第一位也称为“符号位”,但对负数进行了明智的编码,而不仅仅是“符号=1”后跟“原始值”。在这里,负值被“反转”。这种编码允许非常简单的数学运算,因为即:

  0 - 1 ==> 0  ===>   000000000 - 000000001 ==> 111111111 +underflow,ignored
 -1 + 1 ==> 0  ===>   111111111 + 000000001 ==> 000000000 +overflow,ignored

因此,根据您选择的编码,您永远不会有 +256,但您可能有 -256 可用(二进制补码)或没有(普通符号)。

(顺便说一句,把plain和twoscomplement放在一边:当然,您可以采用任何其他编码或以您想要的任何方式对数字进行编码,即范围为-11..500或类似的东西,但可能那里不会有任何明显的“标志”位)

【讨论】:

    【解决方案2】:

    -256 无法使用此方法表示。 要表示 256 及以上的幅度,您需要 9 位。这没有给符号位留下空间。

    您可以使用此方法表示 0 到 255 的幅度以及符号位。

    如果您想表示 -256 到 255(含),请使用 2's complement

    【讨论】:

      猜你喜欢
      • 2021-11-18
      • 2015-01-04
      • 2012-02-02
      • 1970-01-01
      • 1970-01-01
      • 2010-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多