本章目录:
- 前言
- C语言运算符的分类
- 1. 算术运算符
- 2. 关系运算符
- 3. 逻辑运算符
- 4. 位运算符
- 5. 赋值运算符
- 6. 杂项运算符
- 运算符优先级
前言
在C语言中,运算符是程序中执行各种操作的核心工具,涉及算术运算、逻辑判断、位操作等多个方面。掌握C语言中的各种运算符对于写出高效、简洁的代码至关重要。本文将对C语言的运算符进行详细解析,包括其分类、常见使用方法及优化技巧。
C语言运算符的分类
C语言中的运算符可以按功能划分为以下几类:
- 算术运算符:用于进行数学运算。
- 关系运算符:用于比较两个操作数。
- 逻辑运算符:用于逻辑判断。
- 位运算符:用于处理二进制数据。
- 赋值运算符:用于给变量赋值。
- 杂项运算符:包括
sizeof()
、指针操作符、三元运算符等。
1. 算术运算符
算术运算符用于进行基本的数学计算,C语言提供了加、减、乘、除等多种运算。
运算符 | 描述 | 示例 |
---|---|---|
+ | 加法 | A + B |
- | 减法 | A - B |
* | 乘法 | A * B |
/ | 除法 | A / B |
% | 取余 | A % B |
++ | 自增 | A++ |
-- | 自减 | A-- |
示例:
#include <stdio.h>
int main() {
int a = 21;
int b = 10;
int c;
c = a + b;
printf("Line 1: c = %d\n", c);
c = a - b;
printf("Line 2: c = %d\n", c);
c = a * b;
printf("Line 3: c = %d\n", c);
c = a / b;
printf("Line 4: c = %d\n", c);
c = a % b;
printf("Line 5: c = %d\n", c);
return 0;
}
输出:
Line 1: c = 31
Line 2: c = 11
Line 3: c = 210
Line 4: c = 2
Line 5: c = 1
2. 关系运算符
关系运算符用于比较两个操作数的大小或相等性,通常用于控制结构(如if
语句)中。
运算符 | 描述 | 示例 |
---|---|---|
== | 等于 | (A == B) |
!= | 不等于 | (A != B) |
> | 大于 | (A > B) |
< | 小于 | (A < B) |
>= | 大于或等于 | (A >= B) |
<= | 小于或等于 | (A <= B) |
示例:
#include <stdio.h>
int main() {
int a = 21, b = 10;
if (a == b) {
printf("a equals b\n");
} else {
printf("a does not equal b\n");
}
return 0;
}
3. 逻辑运算符
逻辑运算符主要用于布尔值运算,在条件表达式中判断多个条件是否成立。
运算符 | 描述 | 示例 |
---|---|---|
&& | 逻辑与 | (A && B) |
|| | 逻辑或 | (A || B) |
! | 逻辑非 | !(A && B) |
示例:
#include <stdio.h>
int main() {
int a = 5, b = 10;
if (a && b) {
printf("Both a and b are non-zero\n");
}
if (a || b) {
printf("At least one of a or b is non-zero\n");
}
return 0;
}
4. 位运算符
位运算符用于操作数字的二进制位,这在一些低级编程、嵌入式开发中非常有用。
运算符 | 描述 | 示例 |
---|---|---|
& | 按位与 | A & B |
| | 按位或 | A | B |
^ | 按位异或 | A ^ B |
~ | 按位取反 | ~A |
<< | 左移 | A << 2 |
>> | 右移 | A >> 2 |
交换两个数的值:
使用异或运算符^
可以不借助临时变量交换两个数的值:
#include <stdio.h>
int main() {
unsigned int a = 60; // 0011 1100
unsigned int b = 13; // 0000 1101
a = a ^ b; // a = 0011 0001
b = a ^ b; // b = 0011 1100
a = a ^ b; // a = 0000 1101
printf("a = %d, b = %d\n", a, b); // 输出交换后的结果
return 0;
}
输出:
a = 13, b = 60
5. 赋值运算符
赋值运算符用于将右侧的值赋给左侧的变量。C语言还提供了复合赋值运算符,如+=
、-=
等,简化了某些常见操作。
运算符 | 描述 | 示例 |
---|---|---|
= | 赋值 | C = A + B |
+= | 加法赋值 | C += A |
-= | 减法赋值 | C -= A |
*= | 乘法赋值 | C *= A |
/= | 除法赋值 | C /= A |
%= | 求余赋值 | C %= A |
示例:
#include <stdio.h>
int main() {
int a = 21, c;
c = a;
printf("c = %d\n", c);
c += a;
printf("c += a: %d\n", c);
c *= a;
printf("c *= a: %d\n", c);
return 0;
}
6. 杂项运算符
C语言中还有一些独特的运算符,像sizeof
、&
、*
和三元运算符。
运算符 | 描述 | 示例 |
---|---|---|
sizeof | 获取变量的大小 | sizeof(a) |
& | 获取变量地址 | &a |
* | 解引用指针 | *ptr |
?: | 三元运算符 | condition ? x : y |
示例:
#include <stdio.h>
int main() {
int a = 10;
int *ptr = &a;
// sizeof 运算符
printf("Size of a: %lu\n", sizeof(a));
// 指针操作符
printf("Address of a: %p\n", (void*)&a);
printf("Value at ptr: %d\n", *ptr);
// 三元运算符
int b = (a == 10) ? 20 : 30;
printf("b = %d\n", b);
return 0;
}
运算符优先级
运算符优先级决定了表达式中各个操作数计算的顺序。较高优先级的运算符会先执行。
类别 | 运算符 | 结合性 |
---|---|---|
后缀 | () [] -> . ++ -- | 从左到右 |
一元 | + - ! ~ ++ -- (type) * & sizeof | 从右到左 |
乘除 | * / % | 从左到右 |
加减 | + - | 从左到右 |
移位 | << >> | 从左到右 |
关系 | < <= > >= | 从左到右 |
相等 | == != | 从左 |