因此,我尝试使用符号和幅值来表示9位内存位置中的数字-256。
我的想法对吗,它不会有代表?
例如,使用+256,我看不出负片如何适合下面的内容:
+256 = 256 128 64 32 16 8 4 2 1
1 0 0 0 0 0 0 0 0我在想-256对于9位系统来说太大了?
非常感谢
发布于 2014-01-15 22:02:52
很抱歉,我没有完全理解你的设置。我会回答一些“周围”的问题。
如果你的“位布局”很简单:
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是"sign“位,而rawvalue是0。
注意,数学上是-0,== +0,但它们有不同的符号。这是对一个值的浪费,也会使数学运算复杂化。这是引入two-complement系统的其他原因之一,它允许您使用
-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或类似的范围,但可能不会有任何明显的“符号”位)
发布于 2014-01-15 22:21:37
-256不能用这种方法表示。要表示256或更高的幅度,需要9位。这就没有空间给符号位留出空间。
您可以使用此方法表示0到255 (包括0和255)的幅度以及符号位。
如果你想表示-256到255,那么使用2's complement。
https://stackoverflow.com/questions/21138684
复制相似问题