9位存储器位置 - 符号和幅度

时间:2014-01-15 13:27:43

标签: decimal sign negative-number

所以我试图使用符号和幅度来表示9位内存位置中的数字-256。

我是否正确地认为,它没有代表性?

例如,使用+256,我看不出负面效果如何适合我的情况:

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

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

非常感谢

2 个答案:

答案 0 :(得分:0)

对不起,但我并不完全了解您的设置。我会回答一下“。”

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

  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感觉到“符号”位并且rawvalue是0。

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

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

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

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

所以,根据您选择的编码,您将永远不会有+256,但您可能有-256可用(两个补码),或者不是(纯符号)。

(顺便说一句,将普通和两个补码放在一边:当然,你可以采取任何其他编码或以任何你想要的方式编码数字,即具有-11..500或类似的范围,但可能那里不会有任何明显的“标志”)

答案 1 :(得分:0)

-256无法使用此方法表示。要表示256级及以上,您需要9位。这留下了一个符号位的空间。

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

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