问题:
最近在做题时对运算符优先级有些疑惑
我的理解:
=优先级高于!=,所以表达式等价于a != (3 >= 1),先执行3>=1为真,返回值为1,
再执行a != 1为假,返回值为0,运行结果不打印
上面运算顺序还能看懂,但后面的代码的运算顺序有点理解不了··
我的理解:
&&的优先级高于||,所有表达式等价于a++ || (b++ && c++),应该先执行b++ != 0为假,c++不执行,再执行a++ != 0为真,输出结果应该为a = 2, b = 1, c = 0
实际运行结果却是a = 2, b = 0, c = 0(按照优先级的概念,有点理解不了了)
最后还有一道运算顺序的题也不太清楚怎么看运算顺序
望解答
回答1:
if(a != 3 >= 1)
这个表达式根据逻辑运算符优先级相当于
if(a!=(3>=1))
运算过程是:从左往右,
第一步 a != 表达式
第二步 计算表达式的值
第三步 返回结果。
因为(3>=1)
是 第一个逻辑判断条件(a!=xxx)
的一部分(实际上只有一个逻辑判断条件),所以从左往右的第一个逻辑表达式的判定,是需要计算(3>=1)
而你后面的
if(a++ || b++ && c++ )
相当于
if(a++ || (b++ && c++))
第一个逻辑判断条件 a++
也就是 if(a++)
判断为真,立刻跳出 if,后面的也就不会执行。
所以上面两个if条件都是从左往右执行,只是第一个只有一个逻辑判断条件,让你以为执行的顺序是安装优先级执行的。
而第二个有三个逻辑判断条件,很显然是从左往右依次执行。
回答2:
第二个是因为前面的是真的。或运算有一个为真结果就为真所以后面不用进行运算。