对于定义: int m=5, y=2; 当计算表达式 y+=m>y+2||--m 后,
printf("%d#%d#", m, y );
的输出是
求计算过程
5#3#
等价于y = y + (m > y+2 || --m);
m > y+2为真,由于短路或,--m不计算
故y = y + 1 = 3
m依然是5
y+=m>y+2||--m;即可写成y=y+(m>y+2||--m)
m=5,y=2;带入计算:先计算括号内,m>y+2即5>2+2为true,即结果为1,后面是或||运算,只要||前面计算结果为true,就不计算||后面的表达式,因此不计算--m,所以m的值为5, (m > y+2 || --m)=1
所以y=2+1=3,所以m=5,y=3
#include <stdio.h>
#include<math.h>
int main()
{
int m=5,y=2;
y+=m>y+2||--m;
printf("%d#%d#", m, y );
return 0;
}
运算结果:
5#3#