在c语言中,a=(m=a>b)&&(n=c<d);是什么意思

程序段:
int a=2,b=3,c=4,d=5;
int m=2,n=2;
a=(m=a>b)&&(n=c<d);
printf("%d,%d",m,n);

a=(m=a>b)&&(n=c>d)表示将条件(m=a>b)与条件(n=c>d)进行逻辑与运算后,将结果赋值给变量a。


具体执行过程可以通过如下实例来说明:

int a=1, b=2, c=4, d=3;
int m, n;
a=(m=a>b)&&(n=c>d);  
// 先计算(m=a>b),由于a>b为假,所以m=0;
// 再计算(n=c>d),由于c>d为真,所以n=1;
// 最后计算逻辑与,此时将m=0与n=1进行与运算,结果为0,之后将最终结果0赋值给变量a,所以经过a=(m=a>b)&&(n=c>d);运算后a=0

温馨提示:内容为网友见解,仅供参考
第1个回答  2011-06-27
这是个运算符优先级的问题
==的优先级大于=,这段代码可以翻译为
m=(n==b);
解释为:如果n等于b,那么m等于true(即1);否则m等于false(即0);
n=c==d也是这个意思
连接起来就是
如果m等于1或者n等于1,这个表达式的值为1,否则为0;
或者这样解释
如果n等于b或者c等于d,这个表达式的值为1,否则为0;
二者是一个意思。
第2个回答  2011-06-08
先看括号里的,括号中的优先级要高,因为关系运算赋(<,>,<=,>=)的优先级大于赋值运算符(=),所以先判断关系表达式a>b和c>d的值,如果为真,值为1,如果为假,值为0,然后再把值分别赋给m和n,然后就是看&&(逻辑与)这个运算符了,如果m和n的值同时为1,则整个表达式的值为1,即真,如果有一个为0,则整个表达式的值为0,即假。
第3个回答  2011-06-08
()&&() 中&&是逻辑运算符 是逻辑与 说白了就是&&两边的值都为真是 它的结果才为真(1) ;

m=a>b 的意识是 先比较a b的大小,如果a>b 则返回真(1)给m 相反这为假(0);
n=c>d同上
第4个回答  2011-06-27
(m=n= =b)|| (n=c= =d)
就是把(n=b)这个表达式的值(0或1)赋给m,然后(c=d)的值赋给n,
(注意,以上两条式子是数学表达式而不是c语言代码!)
最后让这两个值逻辑或(不是位或!就是1||99仍然为1)
相似回答