LS,貌似&&的优先级比||大 = 赋值语句结合性 自右相左
a=b=c=1;等价于 c = 1;b = c; a = b;
-------------------------
看了sunnyapi的回答我感觉有必要
对以上回答进行一点补充
首先声明 ||和&&运算符均属于短路运算符;
什么是短路运算符举个简单例子
若 a = 1; a||a++;运行后结果是什么,变量a值为多少?
||逻辑或对第一项a进行判断是否为0,若不为零则返回值为1;且不在进行后面的a++运算,这就是短路运算符的特性,这样一来,a的值还是1没有改变,同理 a =0; 0&&a++;的运行结果为a=0;
举个形象点的例子:
a=1 a就是真
b=0 b就是假
a||a-- 真||a++,既然已经有真的了就没必要再判断a--是否为真 1||a++;肯定是真的;
同理 b&&b++ ,假&&b--既然已经有假的了就没有必要判断b++真假,同时b++也就不会被执行
++a||++b&&++c;这个语句根据算数运算符的优先级关系 &&的优先级比||大 ‘可以这样理解’
所以先运行对++a||++b 和 ++c进行逻辑与(&&)运算,并先判断++a||++b是否为假若假则不进行++c;在判断 ++a||++b 是否为真的过程中,进行了++a和++b的||(逻辑或)运算,在逻辑或运算中先判断++a是否为零,这个过程中相当于 先a=a+1;再if (a!=0) 因为前面a=1,再运行++a,a这时等于2所以在if (a!=0) 成立则,不会运行++b;
所以
运行结果为a =2 ,b=c=1;
再程序执行++a||++b&&++c;这条语句的过程中只有a变量的值发生改变,而不是楼下说的那样
“在执行“++a||++b&&++c;”语句之前完成自加运算” 这是错的·
上述方法只是为了帮助你理解这个++a||++b&&++c;语句的意思
若我写个a=b=c=1; ++a||++b&&++c||++a||++b&&++c||++a||++b&&++c;你说该怎么理解?
挨个分析优先级,?
那不得疯了
所以那样也没必要++a||++b&&++c||++a||++b&&++c||++a||++b&&++c;只要由左到右依次运行这样来判断就好了就是(++a )语句1|| (++b&&++c||++a||++b&&++c||++a||++b&&++c)语句2
(++a)==2!=0所以嘛,语句2就不执行了 这样判断也符合 该语句的执行顺序