#include<stdio.h>intmain(){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=5return0;}
关系运算符
运算符
描述
示例
结果
==
等于
5 == 3
0
!=
不等于
5 != 3
1
>
大于
5 > 3
1
<
小于
5 < 3
0
>=
大于等于
5 >= 3
1
<=
小于等于
5 <= 3
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
>>=
右移后赋值
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
运算符优先级
从高到低排列:
运算符
结合性
说明
()[]->.++--
左到右
[1] 后缀操作
!~++--+-(type)*&sizeof
右到左
[2] 一元操作
*/%
左到右
乘除运算
+-
左到右
加减运算
<<>>
左到右
位移运算
<<=>>=
左到右
关系比较
==!=
左到右
相等比较
&
左到右
按位与
^
左到右
按位异或
|
左到右
按位或
&&
左到右
逻辑与
||
左到右
逻辑或
?:
右到左
条件运算符
=+=-=*=/=%=<<=>>=&=^=|=
右到左
赋值运算符
,
左到右
逗号运算符
代码示例
#include<stdio.h>#include<stdio.h>intmain(){// 算术运算符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 = 10
c +=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);// 输出: 最大值: 10return0;}