#include <stdio.h>
int main() {
int a = 10, b = 3;
float x = 10.0, y = 3.0;
// 基本算术运算
printf("a + b = %d\n", a + b); // 加法:13
printf("a - b = %d\n", a - b); // 减法:7
printf("a * b = %d\n", a * b); // 乘法:30
printf("a / b = %d\n", a / b); // 整数除法:3
printf("x / y = %.2f\n", x / y); // 浮点数除法:3.33
printf("a %% b = %d\n", a % b); // 取模:1
return 0;
}
2. 关系操作符
操作符
名称
说明
示例
==
等于
检查两个操作数是否相等
a == b
!=
不等于
检查两个操作数是否不相等
a != b
>
大于
检查左操作数是否大于右操作数
a > b
<
小于
检查左操作数是否小于右操作数
a < b
>=
大于等于
检查左操作数是否大于或等于右操作数
a >= b
<=
小于等于
检查左操作数是否小于或等于右操作数
a <= b
示例代码:
c复制代码
#include <stdio.h>
int main() {
int a = 10, b = 20;
printf("a == b: %d\n", a == b); // 等于:0(false)
printf("a != b: %d\n", a != b); // 不等于:1(true)
printf("a > b: %d\n", a > b); // 大于:0
printf("a < b: %d\n", a < b); // 小于:1
printf("a >= b: %d\n", a >= b); // 大于等于:0
printf("a <= b: %d\n", a <= b); // 小于等于:1
return 0;
}
3. 逻辑操作符
操作符
名称
说明
示例
&&
逻辑与
两个条件都为真时结果为真
a && b
`
`
逻辑或
!
逻辑非
反转操作数的逻辑状态
!a
示例代码:
c复制代码
#include <stdio.h>
int main() {
int a = 1, b = 0, c = 1;
printf("a && b: %d\n", a && b); // 逻辑与:0
printf("a || b: %d\n", a || b); // 逻辑或:1
printf("!a: %d\n", !a); // 逻辑非:0
printf("!b: %d\n", !b); // 逻辑非:1
// 短路求值示例
int x = 0, y = 0;
if (x != 0 && y++ != 0) {
// 由于x!=0为false,y++不会执行
}
printf("y = %d\n", y); // 输出:0
return 0;
}
4. 位操作符
操作符
名称
说明
示例
&
按位与
对两个操作数的每一位执行与操作
a & b
`
`
按位或
对两个操作数的每一位执行或操作
^
按位异或
对两个操作数的每一位执行异或操作
a ^ b
~
按位取反
对操作数的每一位执行取反操作
~a
<<
左移
将位向左移动指定次数
a << n
>>
右移
将位向右移动指定次数
a >> n
示例代码:
c复制代码
#include <stdio.h>
int main() {
unsigned int a = 5; // 二进制:0101
unsigned int b = 3; // 二进制:0011
printf("a & b = %u\n", a & b); // 按位与:0001 = 1
printf("a | b = %u\n", a | b); // 按位或:0111 = 7
printf("a ^ b = %u\n", a ^ b); // 按位异或:0110 = 6
printf("~a = %u\n", ~a); // 按位取反:...11111010
printf("a << 1 = %u\n", a << 1); // 左移1位:1010 = 10
printf("a >> 1 = %u\n", a >> 1); // 右移1位:0010 = 2
return 0;
}
5. 赋值操作符
操作符
名称
说明
示例
=
赋值
将右操作数的值赋给左操作数
a = b
+=
加后赋值
左操作数加右操作数后赋给左操作数
a += b
-=
减后赋值
左操作数减右操作数后赋给左操作数
a -= b
*=
乘后赋值
左操作数乘右操作数后赋给左操作数
a *= b
/=
除后赋值
左操作数除右操作数后赋给左操作数
a /= b
%=
取模后赋值
左操作数取模右操作数后赋给左操作数
a %= b
&=
按位与后赋值
按位与操作后赋值
a &= b
`
=`
按位或后赋值
按位或操作后赋值
^=
按位异或后赋值
按位异或操作后赋值
a ^= b
<<=
左移后赋值
左移操作后赋值
a <<= n
>>=
右移后赋值
右移操作后赋值
a >>= n
示例代码:
c复制代码
#include <stdio.h>
int main() {
int a = 10;
// 简单赋值
a = 20;
printf("a = %d\n", a);
// 复合赋值
a += 5; // 等价于 a = a + 5
printf("a += 5: %d\n", a);
a -= 3; // 等价于 a = a - 3
printf("a -= 3: %d\n", a);
a *= 2; // 等价于 a = a * 2
printf("a *= 2: %d\n", a);
a /= 4; // 等价于 a = a / 4
printf("a /= 4: %d\n", a);
a %= 3; // 等价于 a = a % 3
printf("a %%= 3: %d\n", a);
// 位运算复合赋值
unsigned int b = 5;
b &= 3; // b = b & 3
b |= 8; // b = b | 8
b ^= 4; // b = b ^ 4
return 0;
}
#include <stdio.h>
int main() {
int a = 10, b = 20;
// 条件 ? 表达式1 : 表达式2
int max = (a > b) ? a : b;
printf("较大的数是: %d\n", max);
// 嵌套条件操作符
int score = 85;
char grade = (score >= 90) ? 'A' :
(score >= 80) ? 'B' :
(score >= 70) ? 'C' : 'D';
printf("成绩等级: %c\n", grade);
return 0;
}
8. 逗号操作符
操作符
名称
说明
示例
,
逗号
按顺序执行多个表达式,返回最后一个表达式的值
a = (b++, c++)
示例代码:
c复制代码
#include <stdio.h>
int main() {
int a, b, c;
// 逗号操作符按顺序求值,返回最后一个表达式的值
c = (a = 5, b = 10, a + b);
printf("a = %d, b = %d, c = %d\n", a, b, c); // 输出:a=5, b=10, c=15
// 在for循环中的常见用法
for (int i = 0, j = 10; i < j; i++, j--) {
printf("i = %d, j = %d\n", i, j);
}
return 0;
}
#include <stdio.h>
int main() {
int a = 10, b = 3;
float result;
// 隐式类型转换
result = a / b; // 整数除法
printf("整数除法: %.2f\n", result); // 输出:3.00
// 显式类型转换(强制类型转换)
result = (float)a / b; // 浮点数除法
printf("浮点数除法: %.2f\n", result); // 输出:3.33
// 其他类型转换
double d = 3.14159;
int integer_part = (int)d;
printf("整数部分: %d\n", integer_part); // 输出:3
return 0;
}
操作符优先级总表(从高到低)
优先级
操作符
描述
结合性
1
()[]->.++--
函数调用、数组下标、结构成员、后置递增递减
从左到右
2
!~++--+-*&(type)sizeof
逻辑非、按位取反、前置递增递减、正负号、指针、类型转换
从右到左
3
*/%
乘法、除法、取模
从左到右
4
+-
加法、减法
从左到右
5
<<>>
位左移、位右移
从左到右
6
<<=>>=
关系操作符
从左到右
7
==!=
相等性操作符
从左到右
8
&
按位与
从左到右
9
^
按位异或
从左到右
10
`
`
按位或
11
&&
逻辑与
从左到右
12
`
`
13
? :
条件操作符
从右到左
14
=+=-=*=/=%=&=^= `
=<<=>>=`
赋值操作符
15
,
逗号操作符
从左到右
示例代码:
c复制代码
#include <stdio.h>
int main() {
int a = 5, b = 3, c = 2;
int result;
// 操作符优先级示例
result = a + b * c; // 先乘后加:5 + 6 = 11
printf("a + b * c = %d\n", result);
result = (a + b) * c; // 先加后乘:8 * 2 = 16
printf("(a + b) * c = %d\n", result);
result = a++ * b + c; // 5*3 + 2 = 17,然后a变为6
printf("a++ * b + c = %d, a = %d\n", result, a);
return 0;
}