☰
# C 语言学习|Day3:常见操作符与表达式求值
2026/10/4 3:21:33 网站建设 项目流程

一、算术操作符:+ - * / %

全部属于双目操作符,两个操作数参与运算。

int a = 4 + 22; //加法 int b = 61 - 23; //减法 int c = 5 * 5; //乘法

⚠️两个高频坑

  1. 除法/:整数除法直接舍弃小数
    如果两边都是整数,执行整除。6/4结果为1,不是 1.5。想要小数结果,至少一边写成浮点数6.0 /4。
float x = 6 / 4; // 输出1.000000,整数先做整除 float y = 6.0 /4; // 输出1.500000,浮点数除法

实战坑:(5/20)*100结果是 0,因为5/20整数整除得到 0;改成(5/20.0)*100才能得到预期结果。

  1. 取模%:只允许整型操作数
    用来求余数,结果正负号由第一个操作数决定。
printf("%d\n",11%-5); //1 printf("%d\n",-11%-5); //-1 printf("%d\n",-11%5); //-1

小技巧:num%10可以拿到整数的最后一位数字。

二、赋值操作符

=是赋值,不是数学的等于;相等判断要用==。

int a = 100; //初始化,定义变量同时赋值 a = 200; //赋值,变量已经存在,重新修改值

1. 连续赋值

int a=3,b=0,c=0; c = b = a+3; //从右往左运算

不推荐写连续赋值,可读性差,调试不方便,建议拆开写:

b = a+3; c = b;

2. 复合赋值符

简化代码,等价改写。常用:+= -= *= /= %=

int a =10; a +=3; //等价 a = a+3 a -=2; //等价 a = a-2

注意左边必须是变量,不能是常量。

三、单目操作符:只有一个操作数

本次重点:++、--、正号+、负号-。

1. 自增 ++、自减 –

核心区分前置、后置:

  • 前置++a:口诀:先 + 1,后使用
int a=10; int b = ++a; //a先自增到11,再赋值给b;a=11,b=11
  • 后置a++:口诀:先使用,后 + 1
int a=10; int b = a++; //先把a原始值10赋值b,a再自增;a=11,b=10

--逻辑完全一样,只是操作变成减 1。

注意:++/--只能用于变量,不能用于常量,(10)++直接报错。

2. 单目+、-

+正号,可省略;-负号,用来翻转数值正负。

int a = 10; int b = -a; //b=-10

四、表达式求值

表达式 = 操作符 + 操作数组合,用来算出一个结果。表达式求值由优先级、结合性、类型转换共同决定。

4.1 优先级和结合性

  1. 优先级:优先级高先算。类似数学:括号 > 自增自减 > 乘除取模 > 加减 > 赋值。

3 +4*5,*优先级高,先算 4*5。记不全优先级就多加括号,括号优先级最高,提升可读性。

  1. 结合性:优先级相同时看结合方向
  • 大部分双目运算符(* / + -):左结合,从左往右算;
  • 赋值操作符:右结合,从右往左算。

4.2 类型转换

分为隐式(编译器自动做)、显式强制转换。

  1. 整型提升:char、short这类小于 int 的类型参与运算,会自动提升为 int 再计算。
char c=100; short s=2000; int i = c+s; //c和s提升为int之后再相加
  1. 常规算术转换:不同大类型混合运算,统一转换成同一类型。int 和 float 运算,int 自动转为 float。
  2. 强制类型转换(显式转换)
    格式:(类型)表达式
int a=5,b=2; float c = (float)a / b; //a强制转为float,实现浮点除法

4.3 警惕问题表达式(未定义行为)

C 语言标准没有规定子表达式计算顺序,如果同一个变量在表达式中被多次修改,结果不可预测,不同编译器运行结果不一样,要坚决避免写这类代码。

示例(不要模仿):

int i =1; int r = (++i)+(++i)+(++i); //未定义行为,不同编译器输出不一样

✅建议:尽量拆分复杂表达式,一行只做简单运算,不要把多个自增写在同一个表达式内。

📌本期学习总结

  1. 算术操作符重点记住整数除法陷阱,%只能操作整数;
  2. 分清赋值=和相等判断==,复合赋值简化代码,尽量少写连续赋值;
  3. 单目++/--分清前置后置口诀,只能用于变量;
  4. 表达式求值记住优先级、结合性;有隐式、强制类型转换;
  5. 拒绝问题表达式,不要在同一个表达式多次修改变量,保证代码可移植。

✍️课后小练习

  1. 敲代码对比7/2和7.0/2的输出差异;
  2. 写代码验证前置 ++、后置 ++ 变量变化;
  3. 使用强制类型转换,实现两个整数相除输出小数结果。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询