INT_MIN
的值为什么不能直接表示int
类型的定义域,故其被临时存储成了unsigned int
类型,这在内存中是这样的:0x80000000unsigned int
类型的数字2147483648作用负号,负数在计算机中使用补码表示,对0x80000000计算补码:true
:unsigned int
类型,导致在比较时前面的INT_MIN
也将由signed int
升格为unsigned int
类型,最终导致他俩相等。INT_MIN
来代替直接使用其值。INT_MIN
的绝对值怎么求,用abs
函数吗?如果我们用abs
函数求解INT_MIN
的绝对值的话,返回结果仍是INT_MIN
,这是因为abs
函数返回值的缘故,abs
函数输入一个int
,返回一个int
。而INT_MIN
的绝对值等于INT_MAX+1
,这样,超出int
类型的定义域后的那个加1将会其值重新变为INT_MIN
,这就导致了INT_MIN
的绝对值还等于INT_MIN
的情况。所以,此处我们需要使用llabs
函数来将其强制转化为long long
类型来求绝对值。