a=b=c=1; ++a||++b&&++c; 问语句执行顺序?
逻辑运算符有三种,分别为&&(与运算)||(或运算)!(非运算),三者的优先级顺序为!>&&>||。
PS.
1、与运算符(&&)和或运算符(||)均为双目运算符。具有左结合性。非运算符(!)为单目运算符,具有右结合性。
2、“&&”和“||”优先级低于关系运算符,“!”优先级高于算术运算符。
PS.
1、与运算符(&&)和或运算符(||)均为双目运算符。具有左结合性。非运算符(!)为单目运算符,具有右结合性。
2、“&&”和“||”优先级低于关系运算符,“!”优先级高于算术运算符。
温馨提示:答案为网友推荐,仅供参考
第1个回答 2011-07-05
a=b=c=1
++a
++b
++c
++b&&++c
++a||(++b&&++c)本回答被提问者采纳
++a
++b
++c
++b&&++c
++a||(++b&&++c)本回答被提问者采纳
第2个回答 2011-07-07
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就不执行了 这样判断也符合 该语句的执行顺序本回答被网友采纳
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就不执行了 这样判断也符合 该语句的执行顺序本回答被网友采纳
第3个回答 2011-07-06
a=b=c=1; ++a||++b&&++c; 问语句执行顺序?
解答:
楼上 a19715指出了“赋值语句结合性 自右向左”是正确的,所以a=b=c=1;的执行顺序是:
c=1;
b=1;
a=1;
楼上 翰海苍狼 指出的 ++a||++b&&++c;语句的执行顺序也是对的,我多啰嗦解释一下啊。
首先,++出现在a之前,表示在执行“++a||++b&&++c;”语句之前完成自加运算,所以要先执行自加。同理,b和c也是先完成自加运算。这部分解释可以表述为:
++a;//即执行a=a+1;
++b;//即执行b=b+1;
++c;//即执行c=c+1;
接下来,引用 a19715的一句话“&&的优先级比||高”,不是貌似,的确是的哦,所以
b&&c被执行。注意,此时的b和c已经完成了自加运算。
a||(b&&c)最后被执行。
完毕。楼主明白啦不?@_@
解答:
楼上 a19715指出了“赋值语句结合性 自右向左”是正确的,所以a=b=c=1;的执行顺序是:
c=1;
b=1;
a=1;
楼上 翰海苍狼 指出的 ++a||++b&&++c;语句的执行顺序也是对的,我多啰嗦解释一下啊。
首先,++出现在a之前,表示在执行“++a||++b&&++c;”语句之前完成自加运算,所以要先执行自加。同理,b和c也是先完成自加运算。这部分解释可以表述为:
++a;//即执行a=a+1;
++b;//即执行b=b+1;
++c;//即执行c=c+1;
接下来,引用 a19715的一句话“&&的优先级比||高”,不是貌似,的确是的哦,所以
b&&c被执行。注意,此时的b和c已经完成了自加运算。
a||(b&&c)最后被执行。
完毕。楼主明白啦不?@_@
第4个回答 2011-07-05
先++,再||跟&&