Logo
Section 1 / 6

使用运算符构建表达式

了解算术、关系和逻辑运算符及其在构建C语言表达式中的应用。

导入

使用运算符构建表达式

了解算术、关系和逻辑运算符及其在构建C语言表达式中的应用。

如同其他编程语言一样,在 C 语言中也有许多算术、关系和逻辑 运算符。这些运算符可用于构建由更简单的基本类型和常量组成的 表达式。C 语言中的表达式总是会计算出一个值。

算术运算符

在 C 语言中可以使用以下二元算术运算符:+、-、*、/ 和 %。前四个分别用于加法、减法、乘法和除法,最后一个(%)是 取模运算符,它作用于两个操作数时,计算第一个操作数除以第二个操作数后的余数:

1#include<stdio.h> 2 3int main(void) { 4 int a = 5, b = 2; 5 printf("a 除以 b 的余数是 %d\n", a % b ); 6 return 0; 7}

优先级

编写算术表达式时,我们必须始终注意 运算符优先级,即在求值表达式时运算符的执行顺序。

例如,4 + 5 * 6 的结果是 34,因为 * 运算符的优先级高于 +,所以表达式被计算为 4 + (5 * 6),而不是 (4 + 5) * 6。一种常见的应对策略是始终使用括号明确表示期望的优先级。因此,与其写:

1double q = a * x * x + b * x + c;

这虽然准确表达了二次方程:

ax2+bx+cax^2+bx+c

不如写成这样:

1double q = (a * x * x) + (b * x) + c;

另一个说明运算符优先级的例子:

下面代码中 result1、result2 和 result3 变量的值分别是多少?

1#include <stdio.h> 2 3int main(void) { 4 int a = 100, b = 2, c = 25, d = 4; 5 int result1, result2, result3; 6 result1 = a * b + c * d; 7 result2 = (a * b) + (c * d); 8 result3 = a * (b + c) * d; 9 printf("result1 = %d, result2 = %d, result3 = %d\n", 10 result1, result2, result3); 11 return 0; 12}

始终使用括号有助于避免因运算符优先级导致计算错误的情况。这类错误很难调试。

关系运算符

关系运算符包括 >、>=、< 和 <=。它们用于判断两个表达式的相对大小关系,且所有关系运算符具有相同的优先级。

此外还有两个相等性运算符:== 用于检查两个表达式是否相等,!= 用于检查是否不相等。

在 C 语言中,默认情况下,关系运算符的结果会被转换为整数值:0 表示假,1 表示真。

1#include<stdio.h> 2 3int main(void) { 4 int a = 3, b = 5; 5 printf("a: %d, b: %d\n", a, b); 6 printf("a < b: %d\n", a < b); 7 printf("a >= b: %d\n", a >= b); 8 9 printf("a == b: %d\n", a == b); 10 printf("a != b: %d\n", a != b); 11 return 0; 12}

逻辑运算符

C 语言中有两个二元 逻辑运算符:&& 用于逻辑与(AND),|| 用于逻辑或(OR)。

  • 表达式 a && b 的结果为假(0),当且仅当 a 或 b 中至少有一个为假(0)。
  • 表达式 a || b 的结果为假(0),当且仅当 a 和 b 都为假(0)。

与关系运算符类似,逻辑运算符的结果也按整数处理:0 表示假,1 表示真。

此外还有一个一元逻辑运算符 !(逻辑非),当应用于一个操作数时,会将 0 变为 1,将非零值变为 0。

1#include <stdio.h> 2 3int main(void) { 4 int a = 0, b = 5; 5 printf("a AND b 的结果是: %d\n", (a && b)); 6 printf("a 和 b 的逻辑非: %d, %d\n", !a, !b); 7 printf("b=%d, !b=%d\n", b, !b); 8 return 0; 9}

其他运算符的优先级

优先级规则同样适用于其他类型的运算符,就像它们适用于算术运算符一样。大多数人很难记住所有的优先级规则,因此在不确定时查阅参考手册是明智的做法。

即使了解了优先级规则,也始终建议通过显式使用括号来提高代码可读性。例如,以下两个表达式是等价的,但第一个明显更清晰易懂:

1(a < b) && (c > d)
1a < b && c > d

至此,你应该已经掌握了如何使用不同运算符编写表达式。在下一课中,我们将学习如何将一种数据类型转换为另一种。

C 调试器

类型转换