C语言学习笔记 - 43.运算符与表达式 - 运算符1 - 运算符的分类和简单介绍

一、算术运算符

算术运算符用于完成基本的数值运算,是C语言中最基础的运算符类型。

1. 核心运算符列表

运算符 含义 示例 结果
+ 加法 3 + 5 8
- 减法 10 - 4 6
* 乘法 2 * 7 14
/ 除法 7 / 2 3(整数除法)
% 取余(求模) 7 % 2 1

2. 关键用法与注意事项

  • 整数除法规则 :两个整数相除时,结果为整数,向零取整(舍去小数部分)。若需要得到浮点数结果,至少有一个操作数为浮点数。

    复制代码
    printf("%d\n", 5 / 2);    // 输出2
    printf("%f\n", 5.0 / 2);  // 输出2.500000
    printf("%f\n", 5 / 2.0);  // 输出2.500000
  • 取余运算规则

    1. 仅允许整数类型 操作数参与,浮点数不能使用%运算符。

    2. 结果的符号与被除数一致。

      printf("%d\n", 10 % 3); // 输出1
      printf("%d\n", -10 % 3); // 输出-1
      printf("%d\n", 10 % -3); // 输出1


二、关系运算符

关系运算符用于比较两个数值的大小关系,运算结果为逻辑值:真(1) ​ 或 假(0)

1. 核心运算符列表

运算符 含义 示例(a=5, b=3) 结果
> 大于 a > b 1
>= 大于等于 a >= 5 1
< 小于 a < b 0
<= 小于等于 b <= 3 1
== 等于 a == b 0
!= 不等于 a != b 1

2. 关键注意事项

  • 区分=====是关系运算符,用于判断相等;=是赋值运算符,用于给变量赋值。初学者极易混淆,错误使用会导致逻辑bug。

    复制代码
    // 错误写法:将b的值赋给a,条件永远为真(b≠0时)
    if (a = b) {
        printf("a等于b");
    }
    // 正确写法:判断a和b是否相等
    if (a == b) {
        printf("a等于b");
    }

三、逻辑运算符

逻辑运算符用于组合多个关系表达式,实现复杂的条件判断,运算结果同样为逻辑值1(真)或0(假)。

1. 核心运算符列表

运算符 含义 运算规则 示例(a=5, b=0) 结果
! 逻辑非(单目) 真变假,假变真 !a 0
&& 逻辑与(双目) 两边都为真,结果才为真 a>0 && b>0 0
` ` 逻辑或(双目) 只要有一边为真,结果就为真

2. 关键特性:短路求值

逻辑运算符具有短路求值特性,即当左侧表达式已经能确定整个逻辑表达式的结果时,右侧表达式将不再执行:

  • 对于&&:若左侧为假,直接返回假,右侧不执行。

  • 对于||:若左侧为真,直接返回真,右侧不执行。

    int c = 0;
    // 左侧a<0为假,++c不执行
    if (a < 0 && ++c > 0) {
    printf("条件成立");
    }
    printf("%d\n", c); // 输出0,c未被修改

    // 左侧a>0为真,++c不执行
    if (a > 0 || ++c > 0) {
    printf("条件成立");
    }
    printf("%d\n", c); // 仍输出0


四、赋值运算符

赋值运算符用于将右侧表达式的值赋给左侧的变量,分为基本赋值运算符和复合赋值运算符两类。

1. 基本赋值运算符

  • 符号:=

  • 作用:将右侧表达式的值存储到左侧变量对应的内存单元中。

  • 注意:赋值运算符左侧必须是可修改的左值(如变量),不能是常量或表达式。

    复制代码
    int a;
    a = 10;  // 正确
    10 = a;  // 错误,常量不能作为左值
    a + 1 = 20;  // 错误,表达式不能作为左值

2. 复合赋值运算符

复合赋值运算符是算术运算符与基本赋值运算符的结合,用于简化代码,提高编译效率。

复合运算符 等价形式 示例(a=5) 结果
+= a = a + 表达式 a += 3 8
-= a = a - 表达式 a -= 2 3
*= a = a * 表达式 a *= 4 20
/= a = a / 表达式 a /= 2 2
%= a = a % 表达式 a %= 3 2

五、运算符优先级与结合性

当一个表达式中包含多种运算符时,按照优先级从高到低 的顺序执行;优先级相同时,按照结合性决定执行方向。

1. 核心运算符优先级总表(从高到低)

优先级 运算符类别 运算符 结合性
1 逻辑非 ! 右结合
2 算术运算符 *``/``% 左结合
3 算术运算符 +``- 左结合
4 关系运算符 >``>=``<``<= 左结合
5 关系运算符 ==``!= 左结合
6 逻辑运算符 && 左结合
7 逻辑运算符 `
8 赋值运算符 =``+=``-=``*=``/=``%= 右结合

2. 优先级记忆口诀

非算关逻赋(逻辑非 > 算术 > 关系 > 逻辑与/或 > 赋值),括号可以改变优先级,复杂表达式建议使用括号明确执行顺序,提高代码可读性。


六、要点总结

  1. 算术运算符中重点掌握整数除法的向零取整规则和取余运算的整数限制。

  2. 关系运算符中务必区分===,这是初学者最常见的错误点。

  3. 逻辑运算符的短路特性是高频考点,会影响程序的执行流程。

  4. 复合赋值运算符可以简化代码,且编译效率更高,推荐在合适场景使用。

  5. 复杂表达式优先使用括号明确优先级,避免因运算符优先级导致的逻辑错误。

相关推荐
QN1幻化引擎18 分钟前
Dalin L — 我造了一门支持中文编程的语言,完整移植到 Rust 了
人工智能·算法·机器学习
Rainy Blue88319 分钟前
C转C++速成
c语言·c++·算法
txzrxz32 分钟前
二分图详解
数据结构·c++·算法·图论·深度优先搜索·二分图染色
天选之子12333 分钟前
DuckDB学习
jvm·学习
一只小菜鸡..1 小时前
Stanford CS144 学习笔记 (四):网络拥塞控制与 AIMD 算法
网络·笔记·学习
gaosushexiangji1 小时前
数字图像相关DIC系统在结构振动模态测量中的应用
算法
Hammer_Hans1 小时前
DFT笔记82
笔记
KaMeidebaby1 小时前
卡梅德生物技术快报|如何制备单克隆抗体:小众禽类靶点单抗制备实操流程:双载体抗原交叉筛选完整工艺记录
人工智能·python·深度学习·算法·机器学习
xuhaoyu_cpp_java2 小时前
SpringBoot学习(四)
java·经验分享·spring boot·笔记·学习
北域码匠2 小时前
Karatsuba乘法超详细解析(原理+流程+性能分析+纯原生C#无第三方库完整实现)
算法·c#·大数乘法·高精度计算·数据结构与算法·分治算法·karatsuba 乘法