我试图理解为什么INT_MIN
等于-2^31 - 1
而不只是-2^31
。
我的理解是int
是4 bytes = 32 bits
。在这些32 bits
中,我假设1 bit
用于+/-符号,而31 bits
用于实际值。因此,INT_MAX
等于2^31-1 = 2147483647
。另一方面,为什么INT_MIN
等于-2^31 = -2147483648
?这不会超过int
分配的'4字节'吗?根据我的逻辑,我希望INT_MIN
等于-2^31 = -2147483647
答案 0 :(得分:0)
大多数现代系统使用two's complement来表示有符号整数数据类型。在该表示中,正侧中的一个状态用于表示零,因此一个正值小于负值。实际上,这是该系统优于sign-magnitude系统的主要优势之一,其中零有两个表示,+ 0和-0。
让我们采用一种小数据类型,比如说4位宽,以便更好地理解这一点。具有此玩具整数类型的可能状态数将为2⁴= 16个状态。当使用二进制补码表示有符号数时,我们将得到8个负数和7个正数以及零。
Bin Dec
0000 = 0
0001 = 1
0010 = 2
0011 = 3
0100 = 4
0101 = 5
0110 = 6
0111 = 7
1000 = -8
1001 = -7
1010 = -6
1011 = -5
1100 = -4
1101 = -3
1110 = -2
1111 = -1
我认为你很困惑,因为你在想象符号幅度表示用于有符号数字;虽然这也是语言标准所允许的,但这个系统实施的可能性很小,因为二重补充系统是一个更好的代表。