Closed. This question is off-topic。它当前不接受答案。
想改善这个问题吗? Update the question,所以它是on-topic,用于堆栈溢出。
5年前关闭。
众所周知,最小整数因编译器而异,所以我有一个问题:使用各种编译器时,
想改善这个问题吗? Update the question,所以它是on-topic,用于堆栈溢出。
5年前关闭。
众所周知,最小整数因编译器而异,所以我有一个问题:使用各种编译器时,
(int)-2147483648
除以(int)-1
的结果是什么?例如VC6.0,VS2010等? 最佳答案
首先,我们假设我们处于一个带有二进制补码表示法的32-bit
系统中,其中INT_MIN
的值与-INT_MAX - 1
相同。
该表达式:(int) -2147483648 / (int) -1
相当于(int) -2147483648 / -1
因为-1
已经是int
类型。
在32-bit
为INT_MAX
的2147483647
二进制补码系统中,值2147483648
的类型为long
1),因为它不能在int
中表示。 -2147483648
的值也是long
类型。long
值-2147483648
可以用int
表示,(int) -2147483648
的整数转换后的值为INT_MIN
。
这样,原始表达式就等于(在我们的假设下):INT_MIN / -1
此表达式等效于INT_MAX + 1
,在int
中无法表示。实际上,int
类型范围从INT_MIN
到INT_MAX
。该表达式是整数溢出,并且整数溢出会调用C中的未定义行为。
(C99,6.5p5)“如果在表达式的求值过程中发生异常情况(即,如果结果没有在数学上定义或不在其类型的可表示值范围内),则行为不确定。”
1)我们隐式地假设LONG_MAX
是> INT_MAX
,否则值2147483648
的类型是long long
。
关于c++ - (int)-2147483648的结果除以(int)-1,使用不同的编译器? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14070524/
10-08 22:44