signed integer
(使用8位)---范围==> -128 to 127
。
如果我们考虑2的补语表示:
10000000 =128/(-0) [ Since its 2's Complement is 10000000 ]
所以在某种程度上它是negative
零。
现在对于signed
整数,128是1000 0000
而2的补码也是1000 0000
,所以我们没有0
的副本[在负面使用这种表示形式?或者我错过了什么?
抱歉打字错误。是的,范围是-128 to 127
。
但是8位可以在内存10000000
中表示此数字。如果这个数字CAN
存储在内存中,那它的价值是什么?
答案 0 :(得分:8)
不,有符号整数的值为10000000不是128,它是-128。最重要的位用作符号位。
答案 1 :(得分:6)
你错过了2的comp中8位数的范围是-128到127,而不是-127到128的事实。你也误解了2的comp是如何工作的,你将它视为{ {3}}
当p达到最大值时,2的comp循环,你不能简单地通过查看符号位读取,然后将剩余的位看作正常值,然后将两者合并。这将是标志和规模。 e.g。
“但是8位可以在内存10000000中表示这个数字。如果这样 数字可以存储在内存中,它的价值是什么?“
它的值是-128。
答案 2 :(得分:2)
“在某种程度上它是负零。”
no 方式为负零。根据定义,x
的两个补码是~x+1
,并且(假设是8位算术),~0+1
是0000 0000
,而不是1000 0000
。所以零是负零。
正如你所说,1000 0000
的两个补码是1000 0000
,所以这是另一个值,它就是它自己的否定。
在无符号二进制表示中,1000 0000
表示128.在8位二进制补码表示中,它表示-128(这与-127为(~0111 1111)+1
的事实一致,即1000 0001
)。它不能代表128 和 -128,因此它必须是一个或另一个。选择-128具有良好的属性,然后第一位对于负数始终为1
,对于非负数用于0
,因此可称为“符号位”。
答案 3 :(得分:1)
范围为-128
至127
, 不 -127
至128
。 -128
被编码为0b10000000
。请注意,最高位是符号位,因此0b10000000
为负数。 -128
的两个补码确实是128
,但是它超出了整数的范围,无法用它表示。
如果您的整数为16位,-128
将由0b1111111110000000
和128
由0b0000000010000000
表示。较低的字节确实是相同的,但整数的其余部分是不同的,这很重要!
所以你的结论128
或-128
是,呃...不变的WRT二补集是错误的。
答案 4 :(得分:0)
10000000不是(-0)。在任何添加中它都不起作为(-0)。
例如:1 +( - 0)= 0000 0001 + 1000 0000 = 1000 0001 = -127
答案 5 :(得分:0)
8位模式10000000
确实可以解释为128
或-128
。这只是一个协议问题。
如果我们同意将其解释为128
,那么如果8位整数将为-127..128
,则2-s补码范围。
如果我们同意将其解释为-128
,那么如果8位整数将为-128..127
,则2-s补码范围。
标准2的补码表示同意将10000000
解释为-128
,因为知道所有高阶位为1的表示总是代表负数字是相当方便的。因此,在实践中,带符号2的补码表示的范围总是略微“偏移”到负值。
P.S。目前尚不清楚“负零”在哪里出现。 2的补码没有负零。