为什么INT_MIN的绝对值与INT MAX不同?

时间:2015-11-19 05:21:00

标签: c++ c types int

我试图理解为什么INT_MIN等于-2^31 - 1而不只是-2^31

我的理解是int4 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

1 个答案:

答案 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

我认为你很困惑,因为你在想象符号幅度表示用于有符号数字;虽然这也是语言标准所允许的,但这个系统实施的可能性很小,因为二重补充系统是一个更好的代表。