C -(a +1) == ( a +1) 都可以成立?

图片说明
--..这是为什么?

  -1等于二进制11111111....11111111
>>1,高位还是补1,等于还是-1
转换成unsigned int是4294967295因为又被a接收,还是-1
a+1=0
所以-0==0

数据溢出了,能够表示的范围为:-2147483648 ~ 2147483647 。涉及补码的知识。
http://www.cnblogs.com/felixfang/p/3539289.html

 int x = (unsigned int)y;
其实是int x = (int)(unsigned int)y;
注意,其中有一个隐式的类型转换,所谓隐式就是可以不写,但是你不能忽视它的存在。
表面上看你试图将y转换成unsigned,但是因为x是int类型,所以又转回去了。
另外就是 (unsigned int)的优先级最低,x>>1的时候,其实还是有符号位移

-1等于二进制11111111....11111111

1,高位还是补1,等于还是-1
转换成unsigned int是4294967295,数据溢出
a+1=0
所以-0==0

移位后,数据溢出,请看看补码的资料。
这种代码很少看到,基本上是学习和测试不同变量的溢出条件