C-优先级与关联
时间:2020-02-23 14:32:00 来源:igfitidea点击:
在本教程中,我们将学习C编程语言中的优先级和关联性。
我们根据优先级和关联性规则评估表达。
优先规则
优先规则决定应用不同运算符的顺序。
关联规则
关联性规则决定应用同一级别运算符的多次出现的顺序。
让我们谈谈算术运算符的优先级,即加,减,乘,除和模。
乘法,除法和模数具有较高的优先级,而加法和减法则具有较低的优先级。
High */% Low +
评估表达式
在下面的示例中,我们给出了由所有5个运算符组成的算术表达式,即加法,减法,乘法,除法和模数。
我们将首先针对高优先级运算符,然后针对低优先级运算符来解决表达式。
注意!算术表达式从左到右求值。
x = a2-3b + a/b
其中,a = 4,b = 2
首先,我们将使用在C中使用的算术运算符来表达以上公式。
x = a * a - 3 * b + a/b
现在,我们将a和b替换为其各自的值。
x = 4 * 4 - 3 * 2 + 4/2
现在我们将从左到右求解表达式。
//find x x = 4 * 4 - 3 * 2 + 4/2 = (4 * 4) - 3 * 2 + 4/2 [* high priority operator] = 16 - 3 * 2 + 4/2 = 16 - (3 * 2) + 4/2 [* high priority operator] = 16 - 6 + 4/2 = 16 - 6 + (4/2) [/high priority operator] = 16 - 6 + 2 = (16 - 6) + 2 [- low priority operator] = 10 + 2 = (10 + 2) [+ low priority operator] = 12
因此,给定表达式的最终答案是12。
让我们为上述表达式编写一个C程序。
#include <stdio.h> int main(void) { //variables int x, a, b; //initialise a = 4; b = 2; //compute x x = a * a - 3 * b + a/b; //output printf("x = %d\n", x); printf("End of code\n"); return 0; }
x = 12 End of code
计算给定表达式的规则
括号内的表达式首先被评估,因为它们具有最高优先级。
如果是嵌套的括号,请评估最里面的子表达式。
具有更高优先级的运算符将获得更高的优先级。
如果多个运算符具有相同的优先级,则我们应用关联性来确定将首先评估哪个运算符。
优先级和关联性表
运算符 | 描述 | 关联性 | 优先级 |
---|---|---|---|
()[] | 函数callArray元素引用 | 从左至右 | 1 |
+-++-!~*&sizeof(type) | 一元加一元minusIncrementDecrement逻辑取反一个补数指针引用(间接)对象的地址大小类型转换(转换) | 从右向左 | 2 |
* /% | MultiplicationDivisionModulus | 从左至右 | 3 |
+- | 加减 | 从左到右 | 4 |
<< >>>> | 左移右移 | 左移右 | 5 |
<<=>> = | 小于或者小于等于大于大于或者大于 | 从左向右 | 6 |
==!= | EqualityInequality | 从左到右 | 7 |
& | 按位AND | 从左至右 | 8 |
^ | 按位XOR | 从左至右 | 9 |
| | 按位或者 | 从左至右 | 10 |
&& | 逻辑AND | 从左至右 | 11 |
|| | 逻辑或者 | 从左至右 | 12 |
?: | 条件表达式 | 从右向左 | 13 |
= * =/=%= + =-=&= ^ = | = << = >> = | 赋值运算符 | 从右向左 | 14 |
, | 逗号运算符 | 从左到右 | 15 |