C语言学习笔记--(4)运算符与表达式

一.表达式

1.表达式的分类

  1. 算术表达式: 包含算术运算符的表达式,用于执行数学计算,如加法、减法、乘法、除法等。
    int result = 3 + 4 * 5; // result 的值为 23
  2. 关系表达式:包含关系运算符的表达式,用于比较两个值,结果为真(1)或假(0)。
    int isGreater = 5 > 3; // isGreater 的值为 1,因为 5 大于 3
  3. 逻辑表达式:包含逻辑运算符的表达式,用于执行逻辑运算,结果为真或假。
    int result = (5 > 3) && (2 < 4); // result 的值为 1,因为两个条件都为真
  4. 赋值表达式:包含赋值运算符的表达式,用于给变量赋值。
    int a = 5; // a 被赋值为 5
  5. 条件表达式:也称为三元运算符表达式,形式为 条件 ? 表达式1 : 表达式2,根据条件为真或假来计算并返回表达式1或表达式2的值。
    int max = (a > b) ? a : b; // 如果 a 大于 b,则 max 的值为 a,否则为 b
  6. 逗号表达式:用逗号运算符将多个表达式连接起来,按顺序计算每个表达式,整个逗号表达式的值为最后一个表达式的值。
    int a = (b = 3, b + 2); // 先执行 b = 3,然后计算 b + 2,最后 a 的值为 5

2.表达式的特点

  1. 求值顺序:复杂表达式中包含多个运算符时,运算符的优先级和结合性决定了表达式的求值顺序。
  2. 副作用:赋值表达式和递增、递减运算符会改变变量的值,这种改变是表达式的副作用。
  3. 类型转换:当表达式中包含不同类型的数据时,较低类型的数据会自动提升为较高类型,这称为隐式类型转换。

理解和正确使用表达式是编程中的基础技能,有助于编写出清晰、高效的代码。

二.运算符

1.运算符的分类

        由上面表达式其实我们不难看出运算符其实也有很多分类

  1. 算术运算符:用于执行基本的算术运算,如加法(+)、减法(-)、乘法(*)、除法(/)和取余(%)。

  2. 关系运算符:用于比较两个值之间的关系,返回真(1)或假(0)。包括等于(==)、不等于(!=)、大于(>)、小于(<)、大于等于(>=)、小于等于(<=)等。

  3. 逻辑运算符:用于执行逻辑运算,如逻辑与(&&)、逻辑或(||)、逻辑非(!)等。

  4. 位运算符:用于对二进制位进行操作。包括按位与(&)、按位或(|)、按位取反(~)、按位异或(^)、左移(<<)和右移(>>)等。

  5. 赋值运算符:用于给变量赋值。最常见的是等号(=),还有复合赋值运算符,如加等(+=)、减等(-=)等。

  6. 条件运算符:也称为三元运算符,形式为condition ? expr1 : expr2,根据条件的真假选择返回expr1或expr2。

  7. 逗号运算符:用于在表达式中分隔多个表达式,从左到右依次求值,返回最右边的表达式的值。

  8. sizeof运算符:用于获取数据类型或变量所占的字节数。

2.运算符的优先性

  1. 括号 ():括号中的表达式具有最高的优先级,可以用来改变默认的运算顺序。
  2. 一元加 + 和一元减 -:用于表示正负号,具有高优先级。
  3. 递增 ++ 和递减 --:具有高优先级,分别用于增加或减少变量的值。
  4. 强制类型转换 (type):用于将表达式转换为指定的数据类型。
  5. 乘法 *、除法 / 和取余 %:乘法、除法和取余运算具有相同的优先级,高于加法和减法。
  6. 加法 + 和减法 -:加法和减法具有相同的优先级,低于乘法、除法和取余。
  7. 左移 << 和右移 >>:位移运算具有相同的优先级,低于加法和减法。
  8. 关系运算符:包括小于 <、大于 >、小于等于 <=、大于等于 >=。它们的优先级相同,低于位移运算。
  9. 相等性运算符:等于 == 和不等于 !=,优先级相同,低于关系运算符。
  10. 按位与 &:位与运算的优先级低于相等性运算符。
  11. 按位异或 ^:位异或运算的优先级低于按位与。
  12. 按位或 |:位或运算的优先级低于按位异或。
  13. 逻辑与 &&:逻辑与运算的优先级低于位或。
  14. 逻辑或 ||:逻辑或运算的优先级低于逻辑与。
  15. 条件运算符 ? ::条件运算符的优先级最低,用于简单的条件判断。

 例

#include <stdio.h>

int main() {
    int a = 10, b = 5, c = 7;
    int result;

    // 算术运算符:执行基本的算术运算
    result = a + b - c * 2 / 4 % 2;

    // 关系运算符:比较两个值之间的关系
    if (a > b && b <= c) {
        printf("a大于b且b小于等于c\n");
    }

    // 逻辑运算符:执行逻辑运算
    if (a > b && !(c < b)) {
        printf("a大于b且c不小于b\n");
    }

    // 位运算符:对二进制位进行操作
    result = a & b | c ^ 2;
    printf("按位与结果:%d\n", a & b);
    printf("按位或结果:%d\n", a | b);
    printf("按位异或结果:%d\n", c ^ 2);

    // 赋值运算符:给变量赋值
    result += 5;
    printf("赋值运算结果:%d\n", result);

    // 逗号运算符:在表达式中分隔多个表达式
    int i;
    for (i = 0, result = 0; i < 5; i++, result += i) {
        printf("i=%d, result=%d\n", i, result);
    }

    // sizeof运算符:获取数据类型或变量所占的字节数
    printf("int类型占用字节数:%zu\n", sizeof(int));

    return 0;
}

  • 9
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值