a=b=c=1; ++a||++b&&++c; 问语句执行顺序?
a=b=c=1; ++a||++b&&++c; 问语句执行顺序?
解答:
“赋值语句结合性 自右向左”是正确的,所以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;
逻辑运算符号也是分等级的 !运算符等级最高,“&&的优先级比||高”,不是貌似,的确是的哦,所以
b&&c被执行。注意,此时的b和c已经完成了自加运算。
a||(b&&c)最后被执行。
C语言中逻辑运算符_ ___的优先级高于算术运算符。
逻辑非(即‘!’操作符) 优先级高于算术运算符。所有的单目操作符优先级都高于双目和三目操作符。
C语言中逻辑运算符有三种,分别是逻辑与&&,逻辑或||,逻辑非!,其中&&相当于and,||相当于or,!相当于not,而且这三种运算符之间是有级别的,逻辑非的级别最高,其次就是逻辑与、逻辑或。也就是说当三者同时出现时,先执行逻辑非,再执行逻辑与,最后执行逻辑或。当逻辑运算符、算术运算符、关系运算符、赋值运算符同时出现时,先执行逻辑非,再执行算术运算符,然后关系运算符,加下来是逻辑与逻辑或,最后是赋值运算符。
例如:
if(a>b && a>c)printf("正确") 当且仅当a>b且a>c时(即两个条件要同时),此语句执行;
if(a>b || a>c)printf("正确") 当且仅当a>b或者a>c时(即只需要满足一个条件就行),此语句执行;
若条件a为真,!a则为假。
a==b || x==y,先执行a==b和x==y,然后将二者合并取逻辑或运算
…
其他的类推
————————————————————————————————————————————————————————————————————————————————