- -实践出真知
楼上的几位虽然在结果上都对了,但关于优先级、结合性、||和&&两种运算符的“潜规则”没弄清楚。
按你们自己的想法算下下面的程序
#include "stdio.h"
void main()
{
int m=-1,k=-1,a=-1,b=-1;
k=((m=1)||(b=0)&&(a=1));
printf("%d,%d,%d",m,k,a,b);
getch();
}
然后在看看编译结果,很可能有出入。
如果是一样的,也说明的另外一个问题,你们解答问题和你们想表达的不一样
补充下:
k=(m=2)||(m=1)&&(m=0);是计算方法是
k=((m=2)||((m=1)&&(m=0)))
与结合性优先级还有潜规则都有关系,不是user说的先算的m=2(理论算法的确是先m=2,但中间有一个判断该不该用潜规则的过程
)。也不仅仅是楼上版主说的短路。
因为user没说明详细的思路,我还不能推翻,但m456我概念肯定是错的
分别试试m b a
0 0 1
0 1 0
0 1 1
1 0 0
1 0 1
1 1 0
很明显的得出你们的思路有问题
[
本帖最后由 pgy 于 2009-10-22 03:43 编辑 ]