C标准是否保证INT_MIN和INT_MAX之间的关系?

时间:2014-03-05 00:40:15

标签: c standards signed integer-overflow

例如,在2和1的补码中,INT_MAX * -1是有效数字。这有保证吗?还有其他保证吗?例如,INT_MIN在任何架构上都可以是-1还是0?有什么我们可以知道的(INT_MAX + INT_MIN)?我们甚至可以知道(INT_MAX + INT_MIN)不会导致未定义的行为吗?

3 个答案:

答案 0 :(得分:3)

始终定义

INT_MAX + INT_MIN因为添加两个相反符号的数字永远不会溢出。

为了尽可能准确地回答您的问题,C标准要求2的补码,1的补码或符号幅度表示。 (C11 6.2.6.2:2)。 int类型可以具有填充位,但是在任何情况下,符号和值位用于表示对称或几乎对称的数字组。一个人总是有INT_MIN == - INT_MAX - 1INT_MIN == - INT_MAX,具体取决于平台是否使用2的补码。

当然INT_MAX至少为32767,对应于值和符号位的最小值为16位。

答案 1 :(得分:1)

C规范要求INT_MIN为-32767或更低,INT_MAX为32767或更高。我几乎可以说,没有进一步的保证。第22页:http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1124.pdf

答案 2 :(得分:1)

您可以保证INT_MIN最多为-32767,INT_MAX最多为32767.

因此INT_MAX-1始终是有效的int。

然后也始终定义INT_MAX + INT_MIN。