所以我试图使用符号和幅度来表示9位内存位置中的数字-256。
我是否正确地认为,它没有代表性?
例如,使用+256,我看不出负面效果如何适合我的情况:
+256 = 256 128 64 32 16 8 4 2 1
1 0 0 0 0 0 0 0 0
我认为-256对于9位系统来说太大了?
非常感谢
答案 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。