例如,在二进制补码和一的补码中,INT_MAX * -1都是一个有效的数字。这个保证吗?还有其他保证吗?例如,在任何体系结构上,INT_MIN可能是-1或0吗?我们能知道(INT_MAX + INT_MIN)的任何信息吗?我们能否知道(INT_MAX + INT_MIN)不会引起未定义行为?
INT_MAX + INT_MIN
总是有定义的,因为相加两个相反符号的数字永远不会溢出。
要尽可能精确地回答您的问题,C标准规定了2的补码、1的补码或符号-大小表示法。(C11 6.2.6.2:2)。int
类型可能具有填充位,但无论如何,符号和值位都用于表示对称或几乎对称的数字集。一个总是有INT_MIN == - INT_MAX - 1
或INT_MIN == - INT_MAX
,取决于平台是否使用2的补码。
当然,INT_MAX
至少为32767,相应地需要至少16位的值和符号位。
C规范要求INT_MIN的值为-32767或更小,而INT_MAX的值为32767或更大。据我所知,没有提供更多的保证。第22页:http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1124.pdf
INT_MIN
不能为-1,因为它必须至多为-32767。 - Kerrek SB