当前位置 博文首页 > CW_qian的博客:7月16日笔记C语言基础运算符(算术,关系,逻辑

    CW_qian的博客:7月16日笔记C语言基础运算符(算术,关系,逻辑

    作者:[db:作者] 时间:2021-08-25 21:48

    为什么会有运算符表达式,什么是运算符表达式,有什么作用?

    表达式就是表达某种意思,表达式用运算符连接操作数(指令执行操作的数据来源)的式子

    1. 算术运算符

    运算符

    功能说明

    举例

    +

    加法,一目取正

    a+b

    -

    减法,一目取负

    a-b

    *

    乘法

    a*b

    /

    除法

    a/b

    %

    取模(求余)

    a%b

    ++

    自加1

    a++, ++b

    自减1

    a–, --b

    • 关注点:
      • 减号也是负号,比如 -a 是取变量 a 的相反数。
      • 取模运算要求左右两边操作数必须是整型数据。
      • 自加和自减运算不仅可以对整型操作,也可以对浮点数、指针操作。
    • 前后缀运算:
      • 前缀自加自减运算:先进行自加自减,再参与表达式运算
      1. 后缀自加自减运算:先参与表达式运算,在进行自加自减

    int?a = 100;

    int?b = 200;

    int?c = ++a; // a先自加1,变成101;然后再赋值给c,因此c等于101

    int?d = b++; // b先赋值给d,因此d等于200;然后b自加1,变成201

    由关系运算符连接操作数组成的式子,叫做关系表达式

    2. 关系运算符?(结果只有两种,要么为0(假),要么为1(真))

    运算符

    功能

    举例

    说明

    >

    大于

    a > b

    判断a是否大于b

    >=

    大于或等于

    a >= 5

    判断a是否大于或等于5

    <

    小于

    3 < x

    判断3是否小于x

    <=

    小于或等于

    x <= (y+1)

    判断x是否小于或等于y+1

    ==

    等于

    (x+1) == 0

    判断x+1是否等于0

    !=

    不等于

    c != ‘\0’

    判断c是否不等于’\0’

    • 关注点:
      • 关系运算符用于判断运算符两边的表达式是否满足给定的大小条件。
      • 由关系运算符组成的表达式称为关系表达式,其值为布尔型。
      • 判断是否相等是双等号==,而不是一个等号。

    表达某数理逻辑的表达式,对象以字节为单位

    3. 逻辑运算符?(结果只有两种,要么为0(假),要么为1(真))

    运算符

    功能说明

    举例

    !

    逻辑反

    !(x==0)

    &&??a&&b(只要)a为假,那么b不运算,这称之为惰性运算

    逻辑与

    x>0 && x<10

    ||

    逻辑或

    y<10

    • 运算规则:
      • 逻辑反:将逻辑真、假翻转,即真变假,假变真。
      • 逻辑与:将两个关系表达式串联起来,当且仅当左右两个表达式都为真时,结果为真。
      • 逻辑或:将两个关系表达式并联起来,当且仅当左右两个表达式都为假时,结果为假。

    • 特殊规则:
      • 在逻辑与运算中,如果左边表达式的值为假,那么右边表达式将不被执行。
      • 在逻辑或运算中,如果左边表达式的值为真,那么右边表达式将不被执行。

    按bit位(一字节占用8bit)来进行运算操作的运算符,对象以bit位为单位

    4. 位运算符??(将数值转成二进制后再运算)

    运算符

    名称

    举例

    功能说明

    ~

    位逻辑反,按位取反

    ~a(单目运算)

    ~0001==1000

    将变量 a 中的每一位取反

    &

    位逻辑与

    a & b(双目运算)

    1&1==1

    1&0==0

    将变量 a 和 b 逐位进行与操作

    |

    位逻辑或

    a | b(双目运算)

    1|1==1

    1|0 == 1

    0|0==0

    将变量 a 和 b 逐位进行或操作

    ^

    位逻辑异或(不同为真,相同为假

    a ^ b(双目运算)

    将变量 a 和 b 逐位进行异或操作

    <<

    左移

    a << 4

    将变量 a 中的每一位向左移动4位

    >>

    右移

    x >> n

    将变量 x 中的每一位向右移动4位

    • 位运算符操作的对象是数据中的每一位
    • 运算规则:
      • 位逻辑反、位逻辑与、位逻辑或拥有与逻辑运算相似的规则和一样的真值表
      • 异或运算:相同为0,不同为1
      • 移位运算:移出去的不要,空出来的补零。移位运算都是针对无符号数的运算。
      • C语言标准中右移如果是负数,最高位补1

    5.逗号运算符

    int a=1,b=2;

    逗号运算符(优先级最低),从左往右运算

    例如 ?a = 2,b = 1;

    a = (1,2);//2 ,注意这个不是逗号运算符,因为( )优先级最高,所以是赋值运算

    6. 特殊运算符

    • 赋值运算符
      • 不能对常量赋值,只能对变量赋值
      • 不能对数组赋值
      • 可以连续赋值,顺序从右到左

    int?a, b;

    int?x[5];

    a = 100; // 对变量 a 赋值,正确

    3?= 100; // 对常量 3 赋值,错误!

    x = 123; // 对数组 b 赋值,错误!

    // 连续赋值

    a = b = 50; // 先将 50 赋给 b,再将 b 的值赋给 a,正确

    • 复合赋值符
      • 当左右两边有相同的操作数时,采用复合赋值符不仅直观,且能提高运算效率
      • 除了下述10个复合运算符之外,生造别的复合运算符是非法的

    // 加减乘除:

    a += n;(cpu运行效率高)?// 等价于 a = a+n;//cpu运行效率低

    a -= n; // 等价于 a = a-n;

    a *= n; // 等价于 a = a*n;

    a /= n; // 等价于 a = a/n;

    // 求余:

    a %= n; // 等价于 a = a%n;

    // 位运算:

    a &= n; // 等价于 a = a&n;

    a |= n; // 等价于 a = a|n;

    a ^= n; // 等价于 a = a^n;

    a >>= n; // 等价于 a = a>>n;

    a <<= n; // 等价于 a = a<<n;

    逗号运算符(优先级最低),双目运算符 ?int?a = 1,2;//?2?从左向右运算

    逗号最后运行的称为逗号表达式

    例如 :a = 2,b = 1

    7. 条件运算符??(三目运算符)? ?a>b?m:n

    • 唯一需要三个操作数的运算符
    • 语法:表达式1 ? 表达式2 : 表达式3
    • 释义:当表达式1为真时,取表达式2,否则取表达式3
    • 举例:

    int?a = 100;

    int?b = 200;

    int?m = (a>b) ? a : b; ?// 如果 a>b 为真,则 m 取 a 的值,否则取 b 的值

    8. sizeof 运算符

    • 含义:计算指定数据类型或者变量所占据内存的字节数
    • 语法:sizeof(类型) 、sizeof(变量) ,计算变量的字节数时圆括号可以省略
    • 举例: