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