• C 语言编程 — 运算符


    目录

    前文列表

    程序编译流程与 GCC 编译器
    C 语言编程 — 基本语法
    C 语言编程 — 基本数据类型
    C 语言编程 — 变量与常量

    运算符

    运算符是一种告诉编译器执行特定的算数或逻辑操作的符号。

    • 操作对象:又称操作数,是参与计算求值的最小数据单元。操作数可以为常量、变量、函数等。
    • 表达式:用运算符将操作对象连接起来可以构成表达式。表达式是用于计算的式子,是计算求值的基本单位。
    • 优先级:高优先级的运算符先进行运算,低优先级的运算符后进行运算。
    • 结合性:决定了运算符的运算方向。
      • 左结合性:当运算符为从左到右进行运算,那么称这个运算符为左结合性运算符
      • 右结合性:当运算符为从右到左进行运算,那么称这个运算符为右结合性运算符

    NOTE

    • 当一个表达式中出现多个运算符时,需要考虑运算符的优先级和结合性是否影响表达式的求值顺序。
    • 当两个运算符相同优先级时,由运算符的结合性来决定运算顺序。
    • 在表达式中使用圆括号 () 可以改变表达式的运算顺序。

    算数运算符

    在这里插入图片描述

    NOTE:求余运算符的操作数只可以为整型。

    自增、自减运算符

    • i++ :先取值,后自加。使用 i 之后,i=i+1
    • ++i :先自加,后取值。i=i+1 后,再使用 i
    • i- - :先取值,后自减。使用 i 之后,i=i-1
      • -i :先自减,后取值。i=i-1 后, 再使用 i

    NOTE:自增运算符和自减运算符的操作数只可以为变量,不能为常量或表达式。

    比较运算符

    假设变量 A 的值为 10,变量 B 的值为 20,则:

    在这里插入图片描述

    NOTE:比较表达式的运算结果值是 0(假)或 1(真)。C 语言没有 bool 类型,用整数值 0 来表示假,用非 0 值来表示真 。C++ 为提高程序的可读性引入了 bool 类型,bool 类型变量的值为 true 或 false。C++ 为了保持对 C 语言的兼容性,false 用 0 来表示,ture 用 1 来表示。

    逻辑运算符

    逻辑表达式:用逻辑运算符将操作对象连接起来的式子,称为逻辑表达式。

    假设变量 A 的值为 1,变量 B 的值为 0,则:

    在这里插入图片描述
    NOTE:当逻辑表达式中同时出现多种运算符时,按下列顺序进行运算:算术运算→关系运算→逻辑运算。

    位运算符

    位运算符作用于位,并逐位执行操作。&(全一则一)、|(有一则一)、^(异或)、~(取反)的真值表如下所示:

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    假设如果 A = 60,且 B = 13,现在以二进制格式表示,它们如下所示:
    A = 0011 1100
    B = 0000 1101

    • A&B = 0000 1100
    • A|B = 0011 1101
    • A^B = 0011 0001
    • ~A = 1100 0011

    赋值运算符

    赋值运算表达式:用赋值运算符将变量和表达式连接起来的式子,称为赋值运算表达式。
    多重赋值: V1=V2=...=Vn= 表达式。执行时,从右到左把表达式的值按照 Vn、… 、V2、V1 的顺序依次赋给每个变量。

    赋值运算符可分为:

    • 基本赋值运算符: = 将一个数据赋给一个变量功能的运算符。
    • 复合赋值运算符:基本赋值运算符与算术运算符、位运算符等组成复合赋值运算符。

    NOTE:

    • 赋值运算符的左侧必须为变量名,右侧必须为表达式。
    • 赋值运算表达式的值为赋值运算符左侧变量的数据值。
    • 赋值运算表达式的数据类型为左侧变量的数据类型。
    • 当出现右侧表达式的数据类型与左侧变量的数据类型不一致时,则会先把右边表达式的值进行强制数据类型转换后,再进行赋值。

    在这里插入图片描述

    逗号运算符

    逗号运算符:又称为顺序求值运算符,功能是将表达式连接起来,从左向右求解各个表达式,逗号运算的值为最后的表达式 n 的值。

    NOTE:逗号运算符的优先级最低,引入逗号表达式的目的是为了简化程序书写。

    // C/C++ 按顺序计算表达式 1,表达式 2, .....,表达式 n 的值
    // 整个逗号表达式的值为表达式 n 的值
    表达式1, 表达式2, 表达式3, ......, 表达式n
    

    sizeof 运算符

    sizeof 运算符:求某一数据类型或某一变量在内存空间中所占空间的字节数。

    sizeof(变量名或数据类型)
    

    e.g.

    int main()
    {
       char stringA[] = "Hello World!
    ";
       printf(" sizeif( char ) = %d
    ", sizeof(char));
       printf(" sizeif( int ) = %d
    ", sizeof(int));
       printf(" sizeif( long int ) = %d
    ", sizeof(long int));
       printf(" sizeif( float ) = %d
    ", sizeof(float));
       printf(" sizeif( double ) = %d
    ", sizeof(double));
       // 注意 stringA 的末尾还存放着 ''
       printf(" sizeif( stringA ) = %d
    ", sizeof(stringA)/sizeof(char));
       return 0;
    }
    

    杂项运算符

    包括 &(地址运算符)、*(指针运算符)、?:(三元运算符)。
    在这里插入图片描述

    #include <stdio.h>
    
    int main(){
        int a = 4;
        short b;
        double c;
        int * ptr;
    
        printf("a: %lu
    ", sizeof(a));
        printf("b: %lu
    ", sizeof(b));
        printf("c: %lu
    ", sizeof(c));
    
        ptr = &a;
        printf("*ptr: %d
    ", *ptr);
    
        return 0;
    }
    

    运行:

    # ./main
    a: 4
    b: 2
    c: 8
    *ptr: 4

    注意:局部变量 ptr 被定义为指针类型,所以 ptr 可以存储变量的 “指针”,即变量的值在内存中的入口地址。ptr = &a; 存储了局部变量 a 的地址,再通过指针运算符 * 将局部变量 a 的值取出来。

    1. 指针变量:存储的内存地址。
    2. 将变量/函数的内存地址赋值给指针变量。
    3. 通过指针运算符将指针变量储存的内存地址所指向的值取出来。

    运算符的优先级

    较高优先级的运算符出现在表格的上面,具有较低优先级的运算符出现在表格的下面。在表达式中,较高优先级的运算符会优先被计算。

    在这里插入图片描述

    相关阅读:

  • 相关阅读:
    springcloud(3)consul
    springcloud(2)服务提供者配置及集群和信息显示改善
    springcloud(1)Eureka配置及集群
    Git操作和配合GitHub进行代码托管
    GitHub的基本使用
    关于mybatis的各种绑定(bind)错误,找不到类的情况
    springboot整合thymeleaf视图解析器
    spring boot 源码分析-------ApplicationContext
    https原理
    单例模式
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13309380.html
Copyright © 2020-2023  润新知