C语言 解释一下为什么

int a=5,b=6,w=1,x=2,y=3,z=4;
(a=w>x)&&(b=y>z);
为什么a=0,b=6。
解释一下程序的流程

首先你得明白运算的优先级别,如下:
优先级是对多个函数并列时候优先算法的特权,没有注意优先级的顺序就会把算法出错,这些优先级是必须记住的。
下面的是我自己总结的关于C优先级的口诀.
当然,应用这个口诀的前提是你必须认识所有的C语言的运算符。

优先决
括号成员第一; //括号运算符[]() 成员运算符. ->
全体单目第二; //所有的单目运算符比如++ -- +(正) -(负) 指针运算*&
乘除余三,加减四; //这个"余"是指取余运算即%
移位五,关系六; //移位运算符:<< >> ,关系:> < >= <= 等
等于(与)不等排第七; //即== !=
位与异或和位或; //这几个都是位运算: 位与(&)异或(^)位或(|)
"三分天下"八九十;
逻辑或跟与; //逻辑运算符:|| 和 &&
十二和十一; //注意顺序:优先级(||) 底于 优先级(&&)
条件高于赋值, //三目运算符优先级排到 13 位只比赋值运算符和","高//需要注意的是赋值运算符很多!
逗号运算级最低! //逗号运算符优先级最低

"<"">"符号在c语言中运算的结果为0或1即假或真,"="在c中的意思是赋值,既是把右边的值给左边。对于(a=w>x)&&(b=y>z); w>x显然不成立即结果为0,所以a=0。由于“&&”是“且"运算,当”&&“同为真时才为真,由于a=0,即&&前面为假,语句(a=w>x)&&(b=y>z);就为假,不会对下一语句(b=y>z)运算,b的值保持不变。

所以结果是a=0,b=6
温馨提示:答案为网友推荐,仅供参考
第1个回答  2008-06-26
首先 做a=w>x,因为w>x为假,所以a=0(0表示假,非真即假)
又因为前者的a=0,即前者为假,所以直接短路掉&&后面的内容不做,b仍然为6
相似回答