1. 运算符概述
运算符是用于执行各种操作的符号或关键字,例如算术计算、比较和逻辑判断等。在C语言中,运算符可以分为以下几类:
- 算术运算符
- 关系运算符
- 逻辑运算符
- 位运算符
- 赋值运算符
- 其他运算符(如条件运算符、逗号运算符等)
本次我们重点学习前四种运算符。
2. 算术运算符
算术运算符用于执行基本的数学运算。
运算符 | 描述 |
---|---|
+ |
加法 |
- |
减法 |
* |
乘法 |
/ |
除法 |
% |
取模(求余) |
++ |
自增(加1) |
-- |
自减(减1) |
2.1 示例代码
#include <stdio.h>
int main() {
int a = 10, b = 3;
int sum, diff, prod, quot, rem;
sum = a + b; // 加法
diff = a - b; // 减法
prod = a * b; // 乘法
quot = a / b; // 除法
rem = a % b; // 取模(求余)
printf("a + b = %d\n", sum);
printf("a - b = %d\n", diff);
printf("a * b = %d\n", prod);
printf("a / b = %d\n", quot);
printf("a %% b = %d\n", rem); // 注意:输出百分号需要使用%%
a++; // 自增
b--; // 自减
printf("a 自增后 = %d\n", a);
printf("b 自减后 = %d\n", b);
return 0;
}
输出结果:
a + b = 13
a - b = 7
a * b = 30
a / b = 3
a % b = 1
a 自增后 = 11
b 自减后 = 2
3. 关系运算符
关系运算符用于比较两个值,结果为布尔值(在C语言中,0表示假,非0表示真)。
运算符 | 描述 |
---|---|
== |
等于 |
!= |
不等于 |
> |
大于 |
< |
小于 |
>= |
大于等于 |
<= |
小于等于 |
3.1 示例代码
#include <stdio.h>
int main() {
int x = 5, y = 10;
printf("x == y 的结果是 %d\n", x == y);
printf("x != y 的结果是 %d\n", x != y);
printf("x > y 的结果是 %d\n", x > y);
printf("x < y 的结果是 %d\n", x < y);
printf("x >= y 的结果是 %d\n", x >= y);
printf("x <= y 的结果是 %d\n", x <= y);
return 0;
}
输出结果:
x == y 的结果是 0
x != y 的结果是 1
x > y 的结果是 0
x < y 的结果是 1
x >= y 的结果是 0
x <= y 的结果是 1
4. 逻辑运算符
逻辑运算符用于进行布尔逻辑运算,操作数通常为关系表达式或布尔值。
运算符 | 描述 |
---|---|
&& |
逻辑与(AND) |
` | |
! |
逻辑非(NOT) |
4.1 示例代码
#include <stdio.h>
int main() {
int a = 5, b = 10;
// 逻辑与
if (a > 0 && b > 0) {
printf("a 和 b 都是正数。\n");
}
// 逻辑或
if (a > 0 || b < 0) {
printf("a 是正数或者 b 是负数。\n");
}
// 逻辑非
if (!(a > b)) {
printf("a 不大于 b。\n");
}
return 0;
}
输出结果:
a 和 b 都是正数。
a 是正数或者 b 是负数。
a 不大于 b。
5. 位运算符
位运算符用于按位操作整数类型数据,直接操作二进制位。
运算符 | 描述 |
---|---|
& |
按位与(AND) |
` | ` |
^ |
按位异或(XOR) |
~ |
按位取反(NOT) |
<< |
左移 |
>> |
右移 |
5.1 示例代码
#include <stdio.h>
int main() {
unsigned char a = 60; // 60 = 0011 1100
unsigned char b = 13; // 13 = 0000 1101
unsigned char result = 0;
// 按位与
result = a & b; // 0000 1100 = 12
printf("a & b = %d\n", result);
// 按位或
result = a | b; // 0011 1101 = 61
printf("a | b = %d\n", result);
// 按位异或
result = a ^ b; // 0011 0001 = 49
printf("a ^ b = %d\n", result);
// 按位取反
result = ~a; // 1100 0011 = 195
printf("~a = %d\n", result);
// 左移
result = a << 2; // 1111 0000 = 240
printf("a << 2 = %d\n", result);
// 右移
result = a >> 2; // 0000 1111 = 15
printf("a >> 2 = %d\n", result);
return 0;
}
输出结果:
a & b = 12
a | b = 61
a ^ b = 49
~a = 195
a << 2 = 240
a >> 2 = 15
6. 总结
- 算术运算符用于基本数学计算,如加减乘除和取模。
- 关系运算符用于比较两个值,结果为真(非零)或假(零)。
- 逻辑运算符用于进行布尔逻辑运算,常用于条件判断。
- 位运算符直接操作二进制位,常用于底层编程和性能优化。
7. 注意事项
- 整数除法:当两个整数相除时,结果仍为整数,小数部分会被舍弃。
- 自增自减运算符:
++
和--
可以作为前缀或后缀,++i
和i++
在单独语句中效果相同,但在表达式中有区别。 - 逻辑运算符的短路特性:在使用
&&
和||
时,如果左侧表达式已经确定了结果,右侧表达式将不会被计算。 - 位运算符的优先级:在复杂表达式中,建议使用括号来明确运算顺序。