📜  C |运营商|问题23(1)

📅  最后修改于: 2023-12-03 15:13:47.638000             🧑  作者: Mango

C语言运营商问题23

问题描述

在C语言中,运算符是用来执行基本运算的符号。但是在某些情况下,使用运算符时会产生一些意想不到的结果。例如下面这个表达式:

int a = 5;
int b = ++a + ++a;

这个表达式的结果到底是多少?如果你觉得答案是10,那么你就错了!事实上,这个表达式的结果是11。这是因为,C语言规定,当使用自增运算符时,先进行自增运算,再进行加法运算。因此,表达式可以拆分为:

a = a + 1; // 先自增
b = a + a; // 再相加
解决方法

在编写代码时,要特别注意运算符的优先级和结合性。C语言中的运算符优先级和结合性如下表:

| 优先级 | 运算符 | 结合性 | | --- | --- | --- | | 1 | () | 从左到右 | | 2 | ++, -- | 从右到左 | | 3 | *, /, % | 从左到右 | | 4 | +, - | 从左到右 | | 5 | <<, >> | 从左到右 | | 6 | <, <=, >, >= | 从左到右 | | 7 | ==, != | 从左到右 | | 8 | & | 从左到右 | | 9 | ^ | 从左到右 | | 10 | | | 从左到右 | | 11 | && | 从左到右 | | 12 | || | 从左到右 | | 13 | ?: | 从右到左 | | 14 | =, +=, -=, *=, /=, %=, <<=, >>=, &=, ^=, |= | 从右到左 |

这个表格可以帮助程序员更好地使用运算符。对于上面的例子,如果我们使用括号来显式地指定优先级和结合性,那么可以写成如下方式:

int a = 5;
int b = (++a) + (++a);

这样做可以使表达式变得更加清晰,也可以避免出现一些不必要的错误。

结论

使用运算符时,一定要注意优先级和结合性。如果不确定某个表达式的运算顺序,可以使用括号来强制指定运算的优先级和结合性。这样可以避免出现一些不必要的错误。