原题: 1.设整型变量m,n,a,b,c,d 均为1,执行:(m=a>b)&&(n=a>b);后m,n的值为: 0,1 不解之处: n=1是怎么得到的? 我的分析: 1. (m=a>b)&&(n=a>b); ()运算符优先级最高,所以先算(m=a>b),m=0 (n=a>b),n=0 这里n=0才对啊?但实际运行结果是:n=1 A程序 main() { int m=3,n=3,a=1,b=1,c=1,d=1 ; /*为方便观察m,n值的变化,改为3*/ (m=a>b)&&(n=a>b); printf("m=%d n=%d a=%d b=%d c=%d d=%d\n",m,n,a,b,c,d); } 结果:m=0 n=3 a=1 b=1 c=1 d=1 (n=a>b)被短路 若令 a=2,这时(n=a>b)被计算, m=1 n=1 a=1 b=1 c=1 d=1
&& 比 () 优先级更高吗? 2。更改如下: (m=a>b)&&!(n=a>b); 我认为 !(n=a>b) 首先计算,但实际上并不是,!(n=a>b)并没有被计 算,同样被“短路”了。 B程序 main() { int m=3,n=3,a=1,b=1,c=1,d=1 ; /*为方便观察m,n值的变化,改为3*/ (m=a>b)&&!(n=a>b); printf("m=%d n=%d a=%d b=%d c=%d d=%d\n",m,n,a,b,c,d); } 结果: m=0 n=3 a=1 b=1 c=1 d=1 若令 a=2 m=1 n=1 a=2 b=1 c=1 d=1 可以看出还是先计算(m=a>b) 难道 && 优先级比 !,()还高?