初学者关于C++的位运算和绝对值有关问题

菜鸟关于C++的位运算和绝对值问题
代码如下:

int iTemp;

iTemp = 1 << (sizeof(int)-1); // 也就是1 << 31

iTemp = abs(iTemp);
//iTemp = -iTemp;
//或者是不改变iTemp的值

if(iTemp < 0)
{
  //某段程序代码
}

问题:在iTemp = 1 << 31后对iTemp进行的三种操作都没使iTemp >= 0成立,abs应该是取绝对值的啊,但是得到的结果还是小于0,从不对iTemp做任何改变可知这时应该是负值,但是用了取负值操作符也没有效果...如果说最高位是代表符号位,那么在C++编译(在VC6下编译的)的过程中对"-0"这个东西又是怎么解释的呢?请各位能人高手给小弟指点一下吧,先谢谢了!

------解决方案--------------------
sizeof(int) 一般是4吧...
------解决方案--------------------
iTemp = 1 << (sizeof(int)-1); //也就是1 << 31
=========================================
sizeof(int)-1跟31是不同的。sizeof(int)=int类型的字节数;通常是4

abs应该是取绝对值的啊,但是得到的结果还是小于0
==========================================
int abs(int i);
The abs() function shall compute the absolute value of its integer operand, i. If the result cannot be represented, the behavior is undefined.
这是abs的函数原型定义,它接受的是有符号整型,返回的也是整型;而1<<31是最大的负整数,即lz提到的"-0",在整型表示里,无法表示它的绝对值;因而返回值是未定义的。
------解决方案--------------------
从不对iTemp做任何改变可知这时应该是负值,但是用了取负值操作符也没有效果...
------------------------------------
int 类型的范围是-2147483648~2147483647 注意中间有个0
所以你对-2147483648去绝对值是没有意义的,因为2147483648这个数已经超出了int的范围;