C语言 常见操作符 和 表达式求值 (下)
2026/9/11 23:32:41 网站建设 项目流程

一. 赋值操作符 ( = 和 复合赋值)

⚠️ 在C语言中赋值是从右向左写

例如 :int a = 10;//把整数10赋值给a这个整型变量

⚠️ 连续赋值 (咱不是很推荐,但还是要了解一下)

int a = 3; int b = 5; int c = 0; c = b = a+3;// a+3=6 , b=6 ,c=b=6 从右往左依次赋值
上面这种逻辑顺序,运行时不直观,因此不是很推荐🌱

⚠️ 复合赋值

int n = 10; n = n + 5; //n += 5 15
🌱 C语言中提供了复合赋值符,方便我们编写代码,这些赋值符有 :
1. +=
2. -=
3. /=
4. %=
5. *=

二. 单目运算符 (++ 、- - 、+ 、-)

只有一个操作数的操作符

⚠️ ++ 和 –

① ++ 是一种自增的操作符,又分为前置++ 和 后置++

📌 前置++ ,后置++ 都是让它的操作数自增1,区别在于表达式的值不同。

② - - 是一种自减的操作符,又分为前置- - 和后置- -

📌 前置- - ,后置- - 都是让它的操作数自减1,区别在于表达式的值不同。

例子 ↓

int n = 10; n++; //n = n+1 → n += 1 11 //++n ,也是如此 ,n = 11

⚠️ 后置++ 的口诀:先赋值再自增 (后置- - 也是如此)

int n = 10; int m = n++;// m = 10 ,n = n+1 → n = 11

⚠️ 前置++ 的口诀:先自增再赋值 (前置- - 也是如此)

int n = 10; int m =++n;// n = n+1 → n = 11 → m = n = 11

③ + 和 -

这里的 + 是正号,- 是负号,都是单目操作符。
运算符 + 对正负值没有影响,是一个完全可以省略的运算符,但是写了也不会报错。

例子 ↓

#include<stdio.h>intmain(){inta=-5;printf("%d\n",-a);//5printf("%d\n",a);//-5//聪明的你可能已经发现,这跟数学知识是一样的💡return0;}

四. 表达式求值

学会了上述操作符后,我们使用操作符可以写出一些更加复杂的表达式,比如:

3 + 4 * 5
5 * 6 / 2

🤔 计算顺序是啥?

① 操作符属性

操作符属性:优先级 和 结合性

操作符属性链接,点击一下蓝色区域,可查看

🌈其实大家不用硬记,我们也可以用()来调节 或者查表,毕竟常见的你比较熟悉了,只是那些深奥的绕弯子。

② 类型转换

⚠️ 隐式类型转换(又称自动类型转换)由编译器自动完成,无需程序员显示写出转换代码。它的目的是使表达式中的操作数类型兼容。

⚠️ 整型提升:表达式中的 char 、short 等 长度小于整型类型的长度,在表达式计算的过程中会被自动提升为整型类型(int 或 unsigned int),然后参与运算 ,这里的类型提升就是整型提升。提升后保留值不变,提升后的值与原值相等。

例子 ↓

#include<stdio.h>intmain(){charc=100;shorts=200;intr=c+s;//c 和 s 都被提升为int 后再进行加法。 r = 100 +200 =300,提升后与原值一样printf("%d\n",r);return0;}

⚠️ 常规算术转换:变量的数据类型的长度是大于等于整型类型的长度时,如果某个操作符的各个操作数属于不同的类型,那么除非其中一个操作数的转换 为另一个操作数的类型,否则操作就无法进行。

例子 ↓

#include<stdio.h>intmain(){intn=10;floatf=5.5f;floatr=n+f;//编译器自动把 n 转换为 float类型,再与 f 进行加法运算//n = 10.000000 , r = 15.500000printf("%f\n",r);return0;}

⚠️ 强制类型转换:C语言的隐式类型转换都是按照既定的规则来转换的,但是有时候我们需要更大程序上控制类型的转换,所以就提供了强制类型转换。

形式如下:

(类型)表达式;

例子 ↓

① int n = (int)3.14;//n = 3 ② int a = 5; int b = 2; float c = (float)a / b; //2.500000

五. 问题表达式

C语言中没有规定子表达式的计算顺序,如果一个表达式比较复杂,包含了多个表达式,那么子表达式的计算顺序不确定的情况下就会影响表达式的求值结果。

例如 ↓

a = 10; c = (b = a + 3) - (a = 5);//结果是未定义的 ① a = 5 , b = 5 + 3 = 8 , c = 3 ② b = 13 , a = 5 , c = 8
⚠️ 在不同的编译器底下,结果各不一样,说明这个代码本身就有问题。

例子 ↓

int i = 1; int r = (++i) + (++i) + (++i); //在不同的编译器底下,结果都不一样,不信你试试😁

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

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

立即咨询