C语言-运算符
C语言-运算符

C语言-运算符

一、运算符分类及概念

  1. ​算术运算符​
  • +(加)、-(减)、*(乘)、/(除)、%(取模)
  • ​注意​​:整数相除结果仍为整数(如 5 / 2 = 2);取模运算要求操作数为整数。
  1. ​关系运算符​
  • ==(等于)、!=(不等于)、>(大于)、<(小于)、>=(大于等于)、<=(小于等于)
  • ​结果​​:返回 0(假)或 1(真)。
  1. ​逻辑运算符​
  • &&(逻辑与)、||(逻辑或)、!(逻辑非)
  • ​短路特性​​:&& 左侧为假时,右侧不计算;|| 左侧为真时,右侧不计算。
  1. ​位运算符​
  • &(按位与)、|(按位或)、^(按位异或)、~(按位取反)、<<(左移)、>>(右移)
  • ​作用​​:直接操作二进制位(如 5 & 3 = 1)。
  1. ​赋值运算符​
  • =(赋值)、+=(加后赋值)、-=、*=、/=、%= 等复合运算符。
  • ​示例​​:a += 5 等价于 a = a + 5。
  1. ​条件运算符​
  • ? :(三元运算符),语法:条件 ? 表达式1 : 表达式2。
  • ​示例​​:max = (a > b) ? a : b。
  1. ​逗号运算符​
  • ,(按顺序执行表达式,整体值为最后一个表达式的值)。
  • ​示例​​:int g = (b = 5, a + b),先赋值 b=5,再计算 a + b。
  1. ​其他运算符​
  • sizeof(求大小)、&(取地址)、*(指针解引用)、自增/自减(++、–)等。

二、知识点与记忆技巧

  1. ​优先级与结合性​
  • ​优先级​​:括号 > 单目运算符 > 算术 > 关系 > 逻辑 > 赋值 > 逗号。
  • ​结合性​​:大部分左结合,赋值运算符右结合(如 a = b = c 等价于 a = (b = c))。
  1. ​理解与记忆方法​
  • ​分类记忆​​:按功能分类(算术、逻辑、位操作等)。
  • ​符号联想​​:&& 像“且”,|| 像“或”;<< 左移放大,>> 右移缩小。
  • ​常见用例​​:用 a++ 实现循环计数,用 % 判断奇偶,用 ?: 简化条件赋值。

三、代码示例与逐行解释

#include <stdio.h>

int main() {
    int a = 10, b = 3, c;  // 初始化a=10,b=3,c未赋值
    c = a + b;             // 算术加:c=10+3=13
    c = a % b;             // 取模:c=10%3=1(余数)
    int d = (a > b);       // 关系运算:10>3为真,d=1
    int e = (a > 5) && (b < 5);  // 逻辑与:1 && 1=1,e=1
    c = a & b;             // 位与:10(1010)& 3(0011)= 2(0010)
    a += 5;                // 复合赋值:a=10+5=15
    int f = (a > 10) ? 20 : 0;  // 条件运算:a=15>10,f=20
    int g = (b = 5, a + b);      // 逗号运算:先赋值b=5,再计算g=15+5=20
    printf("c=%d, d=%d, e=%d, f=%d, g=%d\n", c, d, e, f, g);
    return 0;
}

​输出结果​​:

c=2, d=1, e=1, f=20, g=20


四、代码逐行解析

  1. int a = 10, b = 3, c;
  • 定义整型变量 a、b 并初始化为 10 和 3,c 未初始化。
  1. c = a + b;
  • 计算 a + b(10+3),结果 13 赋值给 c。
  1. c = a % b;
  • 计算 a % b(10除以3的余数),结果 1 覆盖 c 的原值。
  1. int d = (a > b);
  • 判断 a > b(10 > 3),结果为真(1),赋值给 d。
  1. int e = (a > 5) && (b < 5);
  • 逻辑与运算:(10>5) 为真,(3<5) 为真,结果 1 赋值给 e。
  1. c = a & b;
  • 按位与运算:10(二进制 1010)和 3(0011)按位与,结果为 2(0010)。
  1. a += 5;
  • 复合赋值:a = a + 5(10+5=15),更新 a 的值。
  1. int f = (a > 10) ? 20 : 0;
  • 条件运算符:a=15 > 10 为真,f 被赋值为 20。
  1. int g = (b = 5, a + b);
  • 逗号运算符:先执行 b = 5,再计算 a + b(15+5=20),结果赋值给 g。
  1. printf(…);
  • 输出变量值:c=2(最后赋值),d=1,e=1,f=20,g=20。

五、总结

  • ​易错点​​:混淆 =(赋值)和 ==(比较),忽略运算符优先级时多用括号。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注