一道简单的C语言选择题为什么选B?

设有:int a=1,b=2,c=3,d=4,m=2,n=2;
执行(m=a>b)&&(n=c>d)后n的值为
A)1 B)2 C)3 D)4

请详细解释一下

m=a>b先算,
>比=优先级高,先算a>b,结果为假,用0表示,
所以m=0,
所以(m=a>b) 这个表达式值为0,
0和任何值进行&&运算结果都为0,因此编译器会对运算过程进行优化,&&右边的表达式不再计算,所以n的值没有变.
温馨提示:答案为网友推荐,仅供参考
第1个回答  2007-04-24
这是个与运算问题,只要有一个为0就是0,所以当m=a>b这个式子执行之后,整个与运算就是0了,系统就不用再执行另外的一条式子,而是跳到下一语句执行了!
第2个回答  2007-04-24
这是一个与判断,两个括号表达式。
&&判断有个特点就是从左向右。如果第一个表达式不成立。第二个表达式就不行进行。前面的(m=a>b)按优先级。先a>b得结果不成立为0再执行m=0.整个前面的括号表达式的值为0.
不管后面的值为多少&&后都为0所以为了提高速度后面的就没有意义进行运算了。所以n的值没有改变。还是为初始值2
所以选B

参考资料:脑子

第3个回答  2007-04-24
&&是逻辑与运算符 当两个都为真的时候才是真的 前面的如果为真才看后面的 如果前面的是假就不用看了 m=a>b是假所以n 不变为2
第4个回答  2007-04-24
无解