2 onewayoranother OneWayOrAnother 于 2015.05.31 15:56 提问

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

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

9个回答

caozhy
caozhy   Ds   Rxr 2015.05.31 16:04
  -1等于二进制11111111....11111111
>>1,高位还是补1,等于还是-1
转换成unsigned int是4294967295因为又被a接收,还是-1
a+1=0
所以-0==0
guwei4037
guwei4037   Ds   Rxr 2015.05.31 16:05

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

caozhy
caozhy   Ds   Rxr 2015.05.31 16:11
 int x = (unsigned int)y;
其实是int x = (int)(unsigned int)y;
注意,其中有一个隐式的类型转换,所谓隐式就是可以不写,但是你不能忽视它的存在。
表面上看你试图将y转换成unsigned,但是因为x是int类型,所以又转回去了。
另外就是 (unsigned int)的优先级最低,x>>1的时候,其实还是有符号位移
caozhy
caozhy 就是你可能觉得是((unsigned int)-1)>>1,其实是(unsigned int)(-1>>1)
2 年多之前 回复
OneWayOrAnother
OneWayOrAnother 您在讲什么- -。为什么说 (unsigned int ) 优先级最低?
2 年多之前 回复
caozhy
caozhy   Ds   Rxr 2015.05.31 16:03
 -1等于二进制11111111....11111111
>>1,高位还是补1,等于还是-1
转换成unsigned int是4294967295因为又被a接收,还是-1
a+1-0
所以-==0
mlys797
mlys797 表示的范围为:-2147483648 ~ 2147483647
2 年多之前 回复
caozhy
caozhy 笔误,请忽略
2 年多之前 回复
caozhy
caozhy   Ds   Rxr 2015.05.31 16:04
 -1等于二进制11111111....11111111
>>1,高位还是补1,等于还是-1
转换成unsigned int是4294967295因为又被a接收,还是-1
a+1=0
所以-1==0
caozhy
caozhy 笔误,请忽略
2 年多之前 回复
wangtao0527
wangtao0527   2015.05.31 17:09

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

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

caozhy
caozhy 直接抄袭已经够无耻了,可是抄还抄的不对,这蠢笨的样子也挺萌的。
2 年多之前 回复
frank_20080215
frank_20080215   2015.05.31 19:37

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

u013643920
u013643920   2015.05.31 22:47

支持 caozhy的!

u012377333
u012377333   Rxr 2015.06.01 09:31

支持 caozhy的!

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!