if(-2147483648 > 0) ----> true
if( int (-2147483648) >0 ) ----> false
上面两句话为什么是不同的结果??
编译器(VS2013)在看到int n = -2147483648;的时候,首先判断2147483648 > INT_MAX,知道int装不下,于是决定使用 unsigned int。然后发现前面还有个负号,于是对2147483648取反
这种代码在编译器上会有一个警告
warning: this decimal constant is unsigned only in ISO C90
因为-2147483648已经超过了int的下界。
强行编译,要看编译器怎么处理,如果是截断高位,那么得到的是7fff ffff,也就是2147483647。但是不同的编译器不同,这个是未定义行为。