C语言中ll 和&&优先级问题:如何验证&&优先级比||高而避开惰性原则?

作者&投稿:褒戚 (若有异议请与网页底部的电邮联系)
C语言中&&和||的优先级问题~

  经过n遍的调试,证明:
  1、||和&&优先级相等,且都是从左往右运算
  2、在出现||和&&的语句中,并不对a++进行运算,只判断它的初值。当然,这条语句结束后,涉及判断的表达式就会进行相应的运算(如:a++)。
  3、在&&运算中,如果&&前面的逻辑值为0(如:令a=0; a++&&b++,此时,a还没有进行++运算,仍为0。但是在本语句结束后就自加1),则结束本语句;如果&&前面的逻辑值为1(如:上面的情况令a=1),则继续判断&&后面的值是否为1,如果为1,则继续判断后面的逻辑运算;如果为0,而结束本语句。
  4、在||运算中,如果||前的逻辑值为1,则结束本语句如果||前的逻辑值为0,则继续判断,若||后的逻辑值为1(如:a||b++, 其中b=1),则结束本语句,否则继续往后判断举个实际的例子:#include
void main()
{
int a,b,c,d;
a=0;
b=0;
c=1;
d=a++||b++&&c++; /*
  运算过程是:
  第一步,判断a 的逻辑值是否为0,可知为0,因此继续往后判断(因为a++这个表达式参与了判断,所以在这条语句结束后,a会变成1);
  第二步,判断b,可知b的逻辑值0,所以a||b==0,因为之后遇到的是&&运算,而又有&&前的逻辑值为0,直接结束本语句,因此C++并没有参与判断,保持值不变(当然,b有参加判断,结束本语句后,b为1);
  第三步,由于0&&c++==0,所以d=0*/
printf("a=%d
b=%d
c=%d
d=%d
",a,b,c,d);
}运行结果:a=1b=1c=1d=0

&& 和||的优先级一样 按从左向右的顺序计算

不过实际使用的时候最好不要靠优先级 ()比优先级可靠的多 用括号可以让程序的可读性提高出错率降低 所以优先级什么的根本不用记

c语言逻辑判断是从左到右顺序判断的。
--x||--y&&++z。。从反汇编语句中就可以看出来,是先判断--x,然后再判断后面。
虽然&&是优先于||,但他们是同级的,即使先判断后面的,最后还是会需要判断--x,所以,--x在前,直接判断--x,如果为1,就直接不需要判断后面的了,会节省很多时间。
--y&&++z||--x。。就会先判断前面--y&&++z。。说明逻辑判断&&、||是同一级别的,都是从左到右开始判断。。用反汇编来检查顺序就可知道。
怎么体现&&的优先级呢?
如:--x||--y&&++z||++n。。虽然还是从左到右的顺序逻辑判断,而中间的--y&&++z,一定是需要先计算--y&&++z的结果,才能和--x与++n来判断。。
而不是先--x||--y,然后&&++z,这就是&&优先级的体现了。

查百科优先级词条即可知道所有运算符优先级

网页链接

实际写代码中并不用关注这个问题  一般需要复杂表达式的情况下会尽可能进行拆分,如果实在无法拆分,也应该尽可能全部加上括号,以防在优先级上产生问题



运算符
按位与 (&)优先级 8, 用于: 表达式 & 表达式
逻辑与 (&&) 优先级 11, 用于: 表达式 && 表达式
逻辑或 ( || ) 优先级 12, 用于: 表达式 || 表达式
条件运算符 (?:) 优先级 13, 用于三目运算: 表达式1? 表达式2: 表达式3
优先级 8 高于 11, 高于 12, 高于 13。

C语言里面&&和||都是逻辑操作,一个是逻辑与一个逻辑或,他们的优先级是一致的。


开县13547743487: C语言中 &&和‖谁优先级更高 -
蒸曲代温: && 的高 优先级【高到低】: 第一级: 圆括号【()】、下标运算符【[]】、分量运算符的指向结构体成员运算符【->】、结构体成员运算符【.】 第二级: 逻辑非运算符【!】、按位取反运算符【~】、自增自减运算符【++ --】、负号运算符【-】...

开县13547743487: c语言的表达式优先级比较. -
蒸曲代温: 1级优先级(左结合) () 圆括号;[]下标运算符;->指向结构体成员运算符;. 结构体成员运算符. 2级优先级(右结合) !逻辑非运算符;~按位取反运算符;++前缀增量运算符;--前缀减量运算符;+正号运算符;-负号运算符;(类型)类型...

开县13547743487: C语言中逻辑运算符非"!"与"&&"或"||"的优先级怎么说? -
蒸曲代温: 逻辑非的优先级最高,逻辑与次之,逻辑或最低,即:!(非) → &&(与) → ||(或) 记忆口诀:not(非) and(与) or(或) 运算规则1)&&:当且仅当两个运算量的值都为"真"时,运算结果为"真",否则为"假". 2) || :当且仅...

开县13547743487: C语言问题 c语言逻辑运算中三个运算符!,&&,|| 哪个最优先?然后怎么个优先顺序 -
蒸曲代温: !逻辑反,&&逻辑与,||逻辑或, 优先级:1.! 2&& 3|| 望采纳~

开县13547743487: 一个C语言运算符优先级的问题 -
蒸曲代温: && 严格从左 向右,如果左边子表达式的为假(0),就不再计算右边的,为提高编译效率,这一类逻辑表达式并不是严格按运算符优先级 因此,只要a的原来值为0(后缀),a还可以自加,但是b没自加机会 但是如果a原来不为0,还要判断b的值(后缀)才能确定表达式的真假,此时,b才可以自加

开县13547743487: c语言 i++与++i 在运算符&&的优先级 -
蒸曲代温: 最终 i=7 . if( (b + i++)=10 && (a + i++)=9) 语句中第一2113个5261i参加运4102算时是5 ,第二个i参加运算时是6 . 不同的编译1653系统,可能有版不同的结果;多数系统是权这个结果.

开县13547743487: 运算符优先级(C语言中) -
蒸曲代温: C语言中 一般来说 算术运算符 > 关系运算符 > 逻辑运算符 > 赋值运算符, 但 C语言中有个"!" 运算符,是逻辑非运算符, 它的优先级是比 算术运算符 高的.如果 考试题目的话,就是 : 算术运算符 > 关系运算符 > 逻辑运算符 > 赋值运算符 但在 实际运用中得注意 ! 运算符优先级 比较高的 .

开县13547743487: 请问C语言的条件运算符?和逻辑运算符&& || ,哪个优先? -
蒸曲代温: 优先级顺序:逻辑与&&,逻辑或||,条件运算符?: 可以参见http://www.slyar.com/blog/c-operator-priority.html 若有不解,欢迎追问.

开县13547743487: C语言中&&比||的优先级高,但在这两个同时出现时又按从左至右运算? -
蒸曲代温: &&比||的优先级高; a||b&&c,是先运算b&&c ,再 a||(b&&c).程序验证:void main() { int a=1,b=1,c=0; printf("%d",a||b&&c); getch(); } 输出结果为1.

开县13547743487: C语言里运算符的级别 -
蒸曲代温: ++a||++b&&++c,加上括号为(++a)||(++b&&++c),++a先算,其结果为2,其值不为0,为真,这时整个表达式为真,后面的就不算了,因此b和c仍然保持为1

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网