C语言学习笔记 - 43.运算符与表达式 - 运算符1 - 运算符的分类和简单介绍
一、算术运算符算术运算符用于完成基本的数值运算是C语言中最基础的运算符类型。1. 核心运算符列表运算符含义示例结果加法3 58-减法10 - 46*乘法2 * 714/除法7 / 23整数除法%取余求模7 % 212. 关键用法与注意事项整数除法规则两个整数相除时结果为整数向零取整舍去小数部分。若需要得到浮点数结果至少有一个操作数为浮点数。printf(%d\n, 5 / 2); // 输出2 printf(%f\n, 5.0 / 2); // 输出2.500000 printf(%f\n, 5 / 2.0); // 输出2.500000取余运算规则仅允许整数类型操作数参与浮点数不能使用%运算符。结果的符号与被除数一致。printf(%d\n, 10 % 3); // 输出1 printf(%d\n, -10 % 3); // 输出-1 printf(%d\n, 10 % -3); // 输出1二、关系运算符关系运算符用于比较两个数值的大小关系运算结果为逻辑值真1 或假0。1. 核心运算符列表运算符含义示例a5, b3结果大于a b1大于等于a 51小于a b0小于等于b 31等于a b0!不等于a ! b12. 关键注意事项区分与是关系运算符用于判断相等是赋值运算符用于给变量赋值。初学者极易混淆错误使用会导致逻辑bug。// 错误写法将b的值赋给a条件永远为真b≠0时 if (a b) { printf(a等于b); } // 正确写法判断a和b是否相等 if (a b) { printf(a等于b); }三、逻辑运算符逻辑运算符用于组合多个关系表达式实现复杂的条件判断运算结果同样为逻辑值1真或0假。1. 核心运算符列表运算符含义运算规则示例a5, b0结果!逻辑非单目真变假假变真!a0逻辑与双目两边都为真结果才为真a0 b00逻辑或双目只要有一边为真结果就为真2. 关键特性短路求值逻辑运算符具有短路求值特性即当左侧表达式已经能确定整个逻辑表达式的结果时右侧表达式将不再执行对于若左侧为假直接返回假右侧不执行。对于||若左侧为真直接返回真右侧不执行。int c 0; // 左侧a0为假c不执行 if (a 0 c 0) { printf(条件成立); } printf(%d\n, c); // 输出0c未被修改 // 左侧a0为真c不执行 if (a 0 || c 0) { printf(条件成立); } printf(%d\n, c); // 仍输出0四、赋值运算符赋值运算符用于将右侧表达式的值赋给左侧的变量分为基本赋值运算符和复合赋值运算符两类。1. 基本赋值运算符符号。作用将右侧表达式的值存储到左侧变量对应的内存单元中。注意赋值运算符左侧必须是可修改的左值如变量不能是常量或表达式。int a; a 10; // 正确 10 a; // 错误常量不能作为左值 a 1 20; // 错误表达式不能作为左值2. 复合赋值运算符复合赋值运算符是算术运算符与基本赋值运算符的结合用于简化代码提高编译效率。复合运算符等价形式示例a5结果a a 表达式a 38-a a - 表达式a - 23*a a * 表达式a * 420/a a / 表达式a / 22%a a % 表达式a % 32五、运算符优先级与结合性当一个表达式中包含多种运算符时按照优先级从高到低的顺序执行优先级相同时按照结合性决定执行方向。1. 核心运算符优先级总表从高到低优先级运算符类别运算符结合性1逻辑非!右结合2算术运算符*/%左结合3算术运算符-左结合4关系运算符左结合5关系运算符!左结合6逻辑运算符左结合7逻辑运算符8赋值运算符-*/%右结合2. 优先级记忆口诀非算关逻赋逻辑非 算术 关系 逻辑与/或 赋值括号可以改变优先级复杂表达式建议使用括号明确执行顺序提高代码可读性。六、要点总结算术运算符中重点掌握整数除法的向零取整规则和取余运算的整数限制。关系运算符中务必区分和这是初学者最常见的错误点。逻辑运算符的短路特性是高频考点会影响程序的执行流程。复合赋值运算符可以简化代码且编译效率更高推荐在合适场景使用。复杂表达式优先使用括号明确优先级避免因运算符优先级导致的逻辑错误。