为什么最小值不像这样:
11111111 11111111 11111111 11111111
请帮我理解这个。
11111111 11111111 11111111 11111111
↑
MSB is 1 indicating that the number is negative
实际上是-1。为什么?
要计算一个数字的补码,你需要将所有位取反后再加1。对你提出的那个数字这样做会得到:
00000000 00000000 00000000 00000001
这是1,但符号为负。所以你得到了-1。
你可能想尝试:
10000000 00000000 00000000 00000000
01111111 11111111 11111111 11111111 flip
00000000 00000000 00000000 00000001 + add 1
-----------------------------------
10000000 00000000 00000000 00000000
这确实是最小值。
-2 < -1
这意味着 "11111111 11111111 11111111 11111111" 是可以在4字节中表示的最小负数(同时也是最大正数)。...尽管楼主自己说的是32位有符号数。 - Grijesh Chauhan让我们使用一个3位的例子来简化问题。
将值0
表示为3位二进制数是000
。
如果我们从0
中减去1
,我们得到-1
。如果我们从000
中减去1
,我们得到111
,并且有一个借位“掉落”,因为我们只有3位。
如果我们继续减去1,我们会得到:
-1 111
-2 110
-3 101
-4 100
如果我们从0
开始加上1
,我们得到正数:
+1 001
+2 010
+3 011
1
时,我们得到的是-4
的表示,而不是+4
。1
=-ve
, 0
=+ve
。0x00000000 - 0xffffffff
内。signed
,必须包括正数和负数,因此解释将其更改为[-0x0fffffff + 1, 0x0fffffff]
或[0x10000000,0x0fffffff]
。该范围均匀分割-[-2^31,2^31-1]