程序段:
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);
第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;
二者是一个意思。
==的优先级大于=,这段代码可以翻译为
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同上
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)
就是把(n=b)这个表达式的值(0或1)赋给m,然后(c=d)的值赋给n,
(注意,以上两条式子是数学表达式而不是c语言代码!)
最后让这两个值逻辑或(不是位或!就是1||99仍然为1)