算术运算符
| 运算符 | 描述 | 示例 | 结果 |
|---|---|---|---|
+ |
加法 | 5 + 3 |
8 |
- |
减法 | 5 - 3 |
2 |
* |
乘法 | 5 * 3 |
15 |
/ |
除法 | 5 / 2 |
2 |
% |
取模 | 5 % 2 |
1 |
++ |
自增 | a++ |
a+1 |
-- |
自减 | a-- |
a-1 |
注意:
- 整数除法会截断小数部分
- 取模运算只能用于整数类型
关系运算符
| 运算符 | 描述 | 示例 | 结果 |
|---|---|---|---|
== |
等于 | 5 == 3 |
0 |
!= |
不等于 | 5 != 3 |
1 |
> |
大于 | 5 > 3 |
1 |
< |
小于 | 5 < 3 |
0 |
>= |
大于等于 | 5 >= 3 |
1 |
<= |
小于等于 | 5 <= 3 |
0 |
C语言中前缀与后缀自增自减运算符的区别
基本概念
前缀形式(先增减)
++variable:先自增,后使用--variable:先自减,后使用
后缀形式(后增减)
variable++:先使用,后自增variable--:先使用,后自减
区别对比表
| 特性 | 前缀形式 (++a, --a) |
后缀形式 (a++, a--) |
|---|---|---|
| 执行顺序 | 先增减,后使用 | 先使用,后增减 |
| 返回值 | 返回增减后的值 | 返回增减前的值 |
| 性能 | 通常更高效 | 可能稍低(需要临时变量) |
| 常见用途 | 需要立即使用新值 | 需要先使用原值 |
代码示例
示例:基本区别
#include <stdio.h>int main() {int a = 5, b = 5;int x, y;// 前缀:先自增,后赋值x = ++a;printf("前缀: a = %d, x = %d\n", a, x); // a=6, x=6// 后缀:先赋值,后自增y = b++;printf("后缀: b = %d, y = %d\n", b, y); // b=6, y=5return 0;
}
逻辑运算符
| 运算符 | 描述 | 示例 | 结果 |
|---|---|---|---|
&& |
逻辑与(全真为真,有假为假,若第一个为假则第二个不判断(短路) | (5>3) && (2>1) |
1 |
|| |
逻辑或(全假为假,有真为真,若第一个为真则第二个不判断(短路)) | (5>3) || (2<1) |
1 |
! |
逻辑非 | !(5>3) |
0 |
位运算符(以二进制形式进行位或)
| 运算符 | 描述 | 示例 | 结果 |
|---|---|---|---|
& |
按位与 | 5 & 3 |
1 |
| |
按位或 | 5 | 3 |
7 |
^ |
按位异或 | 5 ^ 3 |
6 |
~ |
按位取反 | ~5 |
-6 |
<< |
左移(移出丢弃,空出补0) | 5 << 1 |
10 |
>> |
右移(移出丢弃,空出补符号位) | 5 >> 1 |
2 |
赋值运算符
| 运算符 | 描述 | 等价于 |
|---|---|---|
= |
简单赋值 | a = 5 |
+= |
加后赋值 | a += 5 → a = a + 5 |
-= |
减后赋值 | a -= 5 → a = a - 5 |
*= |
乘后赋值 | a *= 5 → a = a * 5 |
/= |
除后赋值 | a /= 5 → a = a / 5 |
%= |
取模后赋值 | a %= 5 → a = a % 5 |
&= |
按位与后赋值 | a &= 5 → a = a & 5 |
| ` | =` | 按位或后赋值 |
^= |
按位异或后赋值 | a ^= 5 → a = a ^ 5 |
<<= |
左移后赋值 | a <<= 5 → a = a << 5 |
>>= |
右移后赋值 | a >>= 5 → a = a >> 5 |
其他运算符
| 运算符 | 描述 | 示例 |
|---|---|---|
sizeof() |
返回变量或类型的大小 | sizeof(int) |
& |
取地址运算符 | &a |
* |
指针运算符 | *ptr |
?: |
条件运算符 | a > b ? a : b |
, |
逗号运算符 | a = (b=3, b+2) → a=5 |
[] |
下标运算符 | arr[5] |
-> |
结构体指针成员访问 | ptr->member |
. |
结构体成员访问 | struct.member |
运算符优先级
从高到低排列:
()[]->.!~++--+-*&(type)sizeof*/%+-<<>><<=>>===!=&^|&&||?:=+=-=*=/=%=&=^=|=<<=>>=,
代码示例
#include <stdio.h>#include <stdio.h>int main() {// 算术运算符int a = 10, b = 3;printf("算术运算:\n");printf("%d + %d = %d\n", a, b, a + b); // 10 + 3 = 13printf("%d / %d = %d\n", a, b, a / b); // 10 / 3 = 3(整数除法,小数部分被截断)// 关系运算符printf("\n关系运算:\n");printf("%d > %d = %d\n", a, b, a > b); // 10 > 3 = 1(真)// 逻辑运算符printf("\n逻辑运算:\n");printf("(%d>%d) && (%d<%d) = %d\n", a, b, a, b, (a>b) && (a<b)); // (10>3) && (10<3) = 0(真 && 假 = 假)// 位运算printf("\n位运算:\n");printf("%d & %d = %d\n", a, b, a & b); // 10 & 3 = 2// 10的二进制: 1010, 3的二进制: 0011// 按位与结果: 0010 = 2// 赋值运算int c = a; // c = 10c += 5; // c = 10 + 5 = 15printf("\n赋值运算: c = %d\n", c); // 输出: c = 15// 条件运算符int max = (a > b) ? a : b; // 10 > 3 为真,所以 max = a = 10printf("最大值: %d\n", max); // 输出: 最大值: 10return 0;
}