这跟运算顺序无关的。数理逻辑运算,“或”是加减法,“与”、“非”是乘法,先乘除后加减,||在前在后都一样。要强制改变运算顺序,必须用括号拆散默认的运算逻辑。
a && b || c的数理逻辑表达式是ab+c,c为真,则值必为真,与ab无关。对某些编译器来说,它甚至会用短路优化算法跳过a、b的求值,此时陷阱就大了(比如有人要靠a、b做点赋值、动作之类的副作用时)。这种在书写时就确知答案的逻辑运算,不要这样写,答题狂才热衷做这样的题目,对实际编程其实无益。
在同一行不要假定或依赖运算顺序,这是现代编程设计的原则。编译器可以改变运算顺序,CPU也可以改变运算顺序,这是以前的技术人员无法想像的,不要再抱着老旧的技术书看。(i++,++i)之类,即是因此。
[
本帖最后由 TonyDeng 于 2011-11-11 11:54 编辑 ]