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