189 8069 5689

C之逻辑运算符(十四)-创新互联

    我们在 C 语言中经常会遇到逻辑运算符。|| 是从左向右开始计算的,当遇到为真的条件时停止计算,整个表达式为真;所有条件为假时表达式才为假。 && 是从左向右开始计算,当遇到为假的条件时停止计算,整个表达式为假;所有条件为真时表达式才为真。

让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:域名注册、虚拟空间、营销软件、网站建设、启东网站维护、网站推广。

        我们先来看个经常会遇到的笔试题,以此代码进行分析

#include 

int main()
{
    int i = 0;
    int j = 0;
    int k = 0;
    
    ++i || ++j && ++k;

    printf("i = %d\n", i);
    printf("j = %d\n", j);
    printf("k = %d\n", k);
    
    return 0;
}

        那么在第 9 行,我们经常会认为先执行 && 运算然后进行 || 运算。那么我们想着就是先执行 ++j && ++k,执行完之后 j 和 k 就分别为 1 了,那么整个表达式的值也就为真了。++i 就不执行了,当然 i 就为 0 了,下来我们来看看结果是否如此

C之逻辑运算符(十四)

        结果刚好跟我们分析的相反。那么我们忽略了一个问题,那就是程序中的短路。在逻辑表达式中, && 比 || 具有更高的优先级。在 && 和 || 混合运算时,整个表达式被看做 || 表达式,编译器从左向右开始计算 && 表达式,当某个 && 表达式的值为真时,停止计算,整个表达式的值为真。那么我们的第9行可以这样看:++i || ++j && ++k ==> ++i || (++j && ++k) ==> (true && ++i) || (++j && ++k)。那么这样分析后,++i 就为 1 了,整个表达式的值就为真了。自然也就不会向后执行了,所以结果应该是1、0、0。

        我们再来看一哥示例代码,比较有迷惑性,代码如下

#include 

int g = 0;

int f()
{
    printf("In f()...\n");

    return g++;
}

int main()
{
    if( g || f() && f() )
    {
        printf("In if statement: %d\n", g);
    }
    
    printf("In main(): %d\n", g);
    
    return 0;
}

        我们来分析下这个代码,第14行表达式便可以看成 (true && g) || (f() && f()),那么由于 g 为0,前面为假,继续向后执行。这是便调用到 f() 了,便会打印出 In f()... 这条语句,它在内部返回的 g++,就是先返回 0 再进行++操作。由于 f() 已经返回 0 了,所以后面的 && 表达式为假,因而 main 函数中的 if 中的打印语句得不到执行。但是由于上面已经 g++ 了,所以这时 g 的值就为 1 啦。我们来看看编译结果

C之逻辑运算符(十四)

       我们下来来看下这个运算符"!"。C语言中的逻辑非 "!" 只认得0,只知道见了0就返回1,其他就都为0。我们来看下示例代码。

#include 

int main()
{
    printf("%d\n", !0);
    printf("%d\n", !1);
    printf("%d\n", !100);
    printf("%d\n", !-1000);
    
    return 0;
}

       由上面可知,第一个为1,其他全为0。编译后结果如图

C之逻辑运算符(十四)

        结果也确实如此。我们今天学习了逻辑运算符相关的知识,总结如下:1、程序中的逻辑表达式遵从短路规则;2、在 && 与 || 混合运算时:整个表达式被看做 || 表达式;从左向右先计算 && 表达式;最后计算 || 表达式;3、逻辑非 "!" 运算符只认得 0 碰见 0 返回 1,否则则返回1。只有 0 才代表假,其余所有值均代表真。后面我们会继续对 C 语言的学习。

         欢迎大家一起来学习 C 语言,可以加我QQ:243343083。

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


当前文章:C之逻辑运算符(十四)-创新互联
标题路径:http://cdxtjz.cn/article/ddieep.html

其他资讯