码迷,mamicode.com
首页 > 其他好文 > 详细

C之逻辑运算符(十四)

时间:2018-04-10 04:17:16      阅读:155      评论:0      收藏:0      [点我收藏+]

标签:C语言   &&   ||      

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

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

#include <stdio.h>

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 了,下来我们来看看结果是否如此

技术分享图片

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

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

#include <stdio.h>

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

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

技术分享图片

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


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

C之逻辑运算符(十四)

标签:C语言   &&   ||      

原文地址:http://blog.51cto.com/12810168/2096301

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!