【嵌入式修炼之路】- C语言第二课之运算符和表达式

学益得线上课堂
从基础学习嵌入式
玩转智能硬件、斩获高薪offer

运算符

  1. 算术运算符 (+ - * / %)
  2. 关系运算符 (> < == >= <= !=)
  3. 逻辑运算符 (! && ||)
  4. 位运算符 (<< >> ~ | ∧ &)
  5. 赋值运算符 (=及其扩展赋值运算符)
  6. 条件运算符 (?:)
  7. 逗号运算符 (,)
  8. 指针运算符 (*和&)
  9. 求字节数运算符(sizeof)
  10. 强制类型转换运算符( (类型) )
  11. 分量运算符(. ->)
  12. 下标运算符([])
  13. 其他 (如函数调用运算符())

算数运算符

优先级

和数学运算优先级一样,先算乘除、再算加减。

结合性

从左向右

  • 两整数相除,结果为整数;
  • 有一实数相除,结果为实数;
  • %要求两侧均为整型数据;
  • 算数运算符不能作为左值使用。

示例

#include 

int main()
{
    int a = 1, b = 2;

    //a + b = 100;         //语法错误,+ - * / % 不能作为左值使用
    
    return 0;
}

关系运算符

关系运算符一般用于if语句判断比较多,结果是成立或者不成立,即 1 或者 0。

示例

#include 

int main()
{
    int a = 1, b = 2;

    printf("%d\n", a > b);    //a > b 不成立,输出 0 
    printf("%d\n", a < b);    //a < b 成立,输出 1
    //(a > b) = 100           //语法错误,关系运算符不能作为左值使用
    
    return 0;
}

逻辑运算符

逻辑运算符常见于判断语句,连接多个条件。

  • && 要求两个条件同时成立;
  • || 要求两个条件只有一个成立就行
  • !取相反的结果

短路原则

以&&为例,如果第一个条件不成立,则不会执行第二个表达式。

示例

#include 

int f1()
{
    printf("this is f1 ...\n");
    return 0;
}

int f2()
{
    printf("this is f2 ...\n");
    return 1;
}

int main()
{
    if (f1() && f2())
    {
        printf("helloworld\n");
    }
    //结果只会打印 this is f1 ... 函数 f2() 不会执行
    return 0;
}

位运算符

【嵌入式修炼之路】- C语言第二课之运算符和表达式_第1张图片

  • 与运算 :1 & 1 = 1; 1 & 0 = 0; 0 & 0 = 0;
  • 或运算 :1 | 1 = 1; 1 | 0 = 1; 0 | 0 = 0;
  • 异或运算:1 ^ 1 = 0; 0 ^ 0 = 0; 1 ^ 0 = 1;

单目运算符

单目运算符需要记住两句话:

#include 

int main()
{
    int i = 0;
    
    printf("%d\n", i++);    //后置++:执行i所在语句之后,i的值加一
    printf("%d\n", ++i);    //前置++:执行i所在语句之前,i的值加一

    return 0;
}

具体细节参考历史文章:

https://blog.csdn.net/xiaopengX6/article/details/104287171

逗号运算符

将两个表达式连接起来,又称为“顺序求值运算符”。比如:

3 + 8, 6 + 5;

先计算 3 + 8,在计算 6 + 5,逗号表达式的最终结果为 11。需要注意的是,第一个表达式确实会运算,只是运算的结果没啥意义,不作为整个表达式的结果。

留个问题,后面博客再讲解:

#include 

int main()
{
    int i;
     
    for (i = 0, printf("i = %d\n", i); i < 5, printf("i = %d\n", i); i++, printf("i = %d\n", i))
    {
        printf("helloworld!\n");
    }

    return 0;
}

赋值运算符

在C语言中,赋值运算符是一个等于号,两个等于号是判断是否相等。

结合性 从右向左

#include 

int main()
{
    int a = 1, b = 2;

    a = b = 100;     //先执行 b = 100, 在执行 a = b;
    
    printf("a = %d b = %d\n", a, b);    // a = 100 b = 100
    
    return 0;
}

赋值运算符不能作为左值

#include 

int main()
{
    int a = 1, b = 2;
    
    //(a = b) = 100;   //编译错误  不能作为左值

    printf("%d\n", a = b);  //返回 a 的数值
    
    return 0;
}

条件运算符

条件运算符多用于判断,又叫三目运算符,因为有三个表达式。

#include 

int main()
{
    int a = 1, b = 2;

    printf("%d\n", (a > b) ? a : b);  //先判断 a > b 是否成立,成立则返回 a 的值,不成立返回 b 的值。
    return 0;
}

条件运算符不能作为左值使用

#include 

int main()
{
    int a = 1, b = 2;

    //(a > b) : a ? b = 100; //语法错误,条件运算符结果是 b 的值,相当于 2 = 100
    
    return 0;
}

各运算符优先级

高优先级
函数符号() 数组下标[]
单目运算符
算数运算符
移位运算符
关系运算符
逻辑运算符
三目运算符
低优先级

更多视频、文章、嵌入式学习资源,微信关注 【学益得智能硬件】

【嵌入式修炼之路】- C语言第二课之运算符和表达式_第2张图片

你可能感兴趣的:(C语言)