C语言中位运算符与逻辑运算符的细小差别:

1、( (( y=1 ) == 0 ) && (( x=6 ) == 6 ) )
2、( (( y=1 ) == 0 ) & (( x=6 ) == 6 ) )

为什么1式中x的值仍为1,而2式中的x的值为6,这是怎么算的?

1.逻辑与被优化掉了,与左边为假就不管右边了 ,于是x=6没有执行

2.算术与没有被优化,虽然0算术与任何数还是0,但是看来没有优化
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-10-05
编译器再优化也不敢优化到结果都不一样啊……逻辑与左边为假就不计算右边,按位与总是计算两边,这是由ISO/IEC标准规定了的行为,不管哪个编译器上都是一样……
第2个回答  2013-10-05
1:&& 是按照结果A && 结果B 这两个结果进行与运算。
2:& 是按照位来运算的。把结果A和B全部按位进行与运算的。
例如 1111110 (254)& 00000001 (1)结果会是 00000000;
第3个回答  2013-10-05
逻辑运算符短路了,是逻辑运算默认采用的一种优化。

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网