C语言的运算符是构建程序逻辑和进行数据处理的基础工具,种类丰富且功能各异。以下从运算符的分类、功能、示例及注意事项等方面进行详细讲解:
一、运算符分类与功能
C语言的运算符主要分为以下10类,共34种具体运算符:
- 算术运算符
- 基本算术运算符:
+
(加)、-
(减)、*
(乘)、/
(除)、%
(取模)。 - 自增/自减运算符:
++
(自增)、--
(自减)。 - 示例:
c int a = 5, b = 2; int sum = a + b; // 加法 int quotient = a / b; // 整数除法(结果为2) a++; // a变为6
- 关系运算符
- 功能:比较两个表达式的值,返回布尔值(0为假,非0为真)。
- 运算符:
>
(大于)、<
(小于)、==
(等于)、>=
(大于等于)、<=
(小于等于)、!=
(不等于)。 - 示例:
c if (a > b) { printf("a is greater than b"); }
- 逻辑运算符
- 功能:根据一个或多个条件的逻辑结果执行操作。
- 运算符:
&&
(逻辑与)、||
(逻辑或)、!
(逻辑非)。 - 示例:
c if (a > 0 && b < 10) { printf("Both conditions are true"); }
- 位操作运算符
- 功能:对整数的二进制位进行操作。
- 运算符:
&
(按位与)、|
(按位或)、^
(按位异或)、~
(按位取反)、<<
(左移)、>>
(右移)。 - 示例:
c int x = 5; // 二进制:0101 int y = 3; // 二进制:0011 int z = x & y; // 按位与,结果为1(二进制:0001)
- 赋值运算符
- 功能:将值赋给变量。
- 运算符:
=
(简单赋值)、+=
、-=
、*=
、/=
、%=
、&=
、|=
、^=
、<<=
、>>=
(复合赋值)。 - 示例:
c int a = 10; a += 5; // a变为15
- 条件运算符(三目运算符)
- 功能:根据条件返回两个值中的一个。
- 运算符:
?:
- 示例:
c int max = (a > b) ? a : b; // 如果a>b,返回a,否则返回b
- 逗号运算符
- 功能:将多个表达式组合成一个表达式,从左到右依次计算,整个表达式的结果为最后一个表达式的结果。
- 示例:
c int a = (1, 2, 3); // a的值为3
- 指针运算符
- 功能:用于指针操作。
- 运算符:
*
(取内容)、&
(取地址)。 - 示例:
c int a = 10; int *p = &a; // p存储a的地址 printf("%d", *p); // 输出a的值(10)
- 求字节数运算符
- 功能:计算数据类型所占的字节数。
- 运算符:
sizeof
- 示例:
c printf("%zu", sizeof(int)); // 输出int类型的字节数(通常为4)
- 特殊运算符
- 功能:包括括号
()
、下标引用[]
、成员访问->
和.
等。 - 示例:
c int arr[5] = {1, 2, 3, 4, 5}; printf("%d", arr[2]); // 输出3
- 功能:包括括号
二、运算符优先级与结合性
- 优先级:决定运算符在表达式中的运算顺序。例如,
*
、/
、%
的优先级高于+
、-
。 - 结合性:当运算符优先级相同时,根据结合性确定运算顺序。大多数运算符为左结合性(从左到右),但单目运算符、条件运算符和赋值运算符为右结合性。
- 示例:
int a = 1, b = 2, c = 3;
int result = a + b * c; // 先计算b*c,再与a相加
三、注意事项
- 整数除法与取模:
- 当除法运算符
/
两侧均为整数时,结果为整数(向下取整)。 - 取模运算符
%
两侧必须为整数。 - 示例:
c int a = 7, b = 2; printf("%d", a / b); // 输出3 printf("%d", a % b); // 输出1
- 自增/自减运算符的前置与后置:
- 前置(
++a
):先自增,再参与运算。 - 后置(
a++
):先参与运算,再自增。 - 示例:
c int a = 5, b = a++; // b的值为5,a变为6 int c = ++a; // a先变为7,c的值为7
- 逻辑运算符的短路求值:
&&
:若左侧为假,右侧不计算。||
:若左侧为真,右侧不计算。- 示例:
c int a = 0, b = 5; if (a && b++) { // a为假,b++不执行 printf("This will not be printed"); } printf("%d", b); // 输出5
- 位运算符的注意事项:
- 位运算符操作的是整数的二进制补码形式。
- 左移运算符
<<
:左边抛弃,右边补0。 - 右移运算符
>>
:算术右移时,左边用符号位填充。
四、总结
- 运算符是C语言的核心:掌握其分类、功能、优先级和结合性是编程的基础。
- 实践与调试:通过实际编写代码(如调试运算符优先级、观察自增/自减行为)加深理解。
- 代码可读性:合理使用括号和复合赋值运算符,避免因优先级误解导致的错误。
通过系统学习运算符,可以编写出更高效、更清晰的C语言程序。建议结合《C Primer Plus》《C和指针》等经典书籍深入学习。