Closed. This question is off-topic。它当前不接受答案。
                            
                        
                    
                
                            
                                
                
                        
                            
                        
                    
                        
                            想改善这个问题吗? 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-bitINT_MAX2147483647二进制补码系统中,值2147483648的类型为long 1),因为它不能在int中表示。 -2147483648的值也是long类型。

long-2147483648可以用int表示,(int) -2147483648的整数转换后的值为INT_MIN

这样,原始表达式就等于(在我们的假设下):

INT_MIN / -1

此表达式等效于INT_MAX + 1,在int中无法表示。实际上,int类型范围从INT_MININT_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