C语言,连续使用(与运算和或运算)&&与 您所在的位置:网站首页 c语言的与或非逻辑 C语言,连续使用(与运算和或运算)&&与

C语言,连续使用(与运算和或运算)&&与

2023-12-22 19:09| 来源: 网络整理| 查看: 265

#include int main(void){ int a, b, c ; A: printf("a b c\n"); scanf("%d %d %d",&a,&b,&c); if(a || b && c) printf("( %d || %d && %d ) = OK!\n",a,b,c); else printf("( %d || %d && %d ) = Error!\n",a,b,c); getchar(); printf("############\n"); goto A; return 0; }

运行结果如下:

根据运行结果可以看出

由(0 || 0 && 1) =Error!,假设 (0 || 0 && 1) == { 0 || ( 0 && 1) } ,先运行(0 && 1) ,结果为假( 0 ),{ 0 || 0 } = 0;

若上面假设为真,利用假设来算 (0 || 1 && 0 ) 的结果,若计算结果与运行结果相同,则假设为真 ,反之为假。

运算:(0 || 1 && 0) == { 0 || ( 1 && 0  ) }=={ 0 || ( 0 ) }==Error!

结果相同,假设正确;

再次检验 :(1 || 1 && 0) == { 1 || ( 1 && 0) } == { 1 || 0 } ==OK! ,与运行结果相同。

结论:

&& 优先级比 || 优先级高 ,同一优先级从左往右计算。

如计算 : ( 1 && 0 || 0 || 1 && 1 || 0 && 1 || 1) 时 

=={ ( 1 && 0 ) || 0 || ( 1 && 1 ) || ( 0 && 1 ) || 1 }     //优先级处理

== { 0 || 0 || 1 || 0 || 1 }    //高优先级计算结束

=={ ( 0 || 0 ) || 1 || 0 || 1 }    //从左往右计算,依次

=={ ( 0 || 1 ) 0 || 1 }

=={ ( 1 || 0 ) || 1 }

=={ 1 || 1 }

==1

补充问题:a =0,b=0,c=0;c=++a||a++&&++b结果的判定?

解决:按照上面的结论,问题等价于:c=++a||(a++&&++b)

按照优先级,a=2,b=2,c=1,错误!!!

错误原因:||的左边只有一个式子,右边一串式子时,编译器并不是按照++a||(a++&&++b)的等价方式处理,而是安如下方式:

(++a)||(a++&&++b)将左边的式子自动添加上括号,以保证优先级的一致性



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有