C语言进阶学习5 逻辑运算符,位运算符,++和--操作,三目运算符和逗号表达式

本文详细探讨了C语言中的逻辑运算符,包括逻辑非、逻辑与和逻辑或的短路特性,以及位运算符的操作。还深入解析了前置和后置++及--操作符的使用陷阱,并介绍了三目运算符和逗号表达式的应用。通过实例分析,帮助读者理解这些运算符在实际编程中的运用和注意事项。
摘要由CSDN通过智能技术生成

本博客记录狄泰学院课程的学习
学习交流群:320628659
个人QQ:1367087622
欢迎大家交流学习
本章的学习目标:
逻辑运算符,位运算符,++和–操作,三目运算符和逗号表达式的学习分析
学习这些知识点使用需要注意的事项

逻辑运算符,位运算符,++和–操作,三目运算符和逗号表达式

逻辑运算符

逻辑运算符在条件判断时虽然看起来挺简单,但是因为使用的频率很高所以有很多需要注意的点需要记录学习

  • 逻辑运算符==&&||!==真的很简单吗?

下面的程序运行结束后i,j,k的值分别为多少?

#include <stdio.h>

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

    printf("%d\n", i);//i=1;
    printf("%d\n", j);//j=0
    printf("%d\n", k);//k=0
    
    return 0;
}
  • 程序中的短路

    • ||左向右开始计算

      • 当遇到为的条件时停止计算,整个表达式为
      • 所有条件为时表达式才为假
    • &&左向右开始计算

      • 当遇到为的条件时停止计算,整个表达式为
      • 所有条件为时表达式才为真

分析后得知,在i为真后就停止了计算。发生了短路。

  • 在逻辑表达式中,==&&||==具有更高的优先级

    • 在==&&||==混合运算时

      1. 整个表达式被看作==||==表达式,

      2. 编译器从左向右开始计算==&&表达式,当某个&&表达式的值为时,停止计算,整个表达式的值为真==。

      3. 最后计算==||==表达式

++ i || ++j && ++k; ⇒ (++i)||(++j && ++k); ⇒ (true && ++i) || (++j && ++k);

程序中的短路规则

#include <stdio.h>

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时因为g为0为假,继续往右判断,到f()时打印了In f()…,到返回时因为是后置++所以先返回g的值为0在增1,g=1,那么右边的f()&&f()的逻辑表达式为假,就发生了短路后面的f()就不会计算了。

所以if的结果为假不执行里面的语句,最后输出In main():1,


逻辑非“!”究竟是什么?

  • 在C语言中的逻辑非“!”
    • ! 只认的0,只知道见了0就返回1。因此当其碰见的值不是0时,其结果为0
#include <stdio.h>

int main()
{
   
    printf("%d\n", !0);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值