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

6
例如,在二进制补码和一的补码中,INT_MAX * -1都是一个有效的数字。这个保证吗?还有其他保证吗?例如,在任何体系结构上,INT_MIN可能是-1或0吗?我们能知道(INT_MAX + INT_MIN)的任何信息吗?我们能否知道(INT_MAX + INT_MIN)不会引起未定义行为?

由于最小值和最大值具有相反的符号(请参见附录E),它们的总和一定是可表示的。附录E还指出,INT_MIN不能为-1,因为它必须至多为-32767。 - Kerrek SB
INT_MIN 必须小于或等于 -32767。所以,它不能是 -1 或 0。 - Stephen Canon
3个回答

4

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位的值和符号位。


2

1
你可以放心,INT_MIN最小值为-32767,INT_MAX最大值为32767。
因此,INT_MAX-1始终是一个有效的整数。
INT_MAX + INT_MIN也总是有定义的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接