4月从零学习C语言(第6天)——运算符优先级

205 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第6天,点击查看活动详情

运算符优先级

我们看下面一个程序,输入两个整数,输出它们的平均值:

#include<stdio.h>
int main()
{
  int a,b;
  scanf ("%d %d", &a,&b);
  double c = (a+b)/2.0;
  printf("%d和%d的平均值=%f\n", a, b, c);

}

当我们在计算的时候要在a+b的地方加上括号这是因为我们在进行运算的时候除法的计算优先级高于加法,如果不加括号那么就成了a+b/2.0的和了。

其实在C语言中也存在优先级,我们一般称作运算符优先级,下面我们看一个表格来看一下运算符的优先级:

优先级运算符描述结合关系实例
1+单目不变自右向左a*+b
1-单目取负自右向左a*-b
2*把两个操作数相乘自左向右A * B 将得到 200
2/分子除以分母自左向右B / A 将得到 2
3+把两个操作数相加自左向右A + B 将得到 30
3-从第一个操作数中减去第二个操作数自左向右A - B 将得到 -10
4=赋值自右向左A=B

注:我们可以将单目运算理解为我们数学中的正负运算。

赋值运算符

需要特别注意的是在C语言中赋值也是运算符

赋值也是运算,也有结果

a=6的结果是a被赋予的值,也就是6

a=b=6 —> a=(b=6)

当我们知道了赋值是运算后,那么我们可以干一件事:

int a = 6;
int b;
int c = 1+(b=a)

这样我们即做了赋值也做了加法,我们称这种做法叫做嵌入式赋值。但是我们真正在编写代码的时候并不建议我们这样做,因为这不光不利于阅读也容易产生错误。

结合关系

—般自左向右

单目+-和赋值=自右向左

result = a =b = 3 + c;
result = 2;
result = (result = result *2)*6*(result = 3 + result);

我们看第三行我们使用的是嵌入式赋值,在这个时候我们从右往左算或者从左向右算的结果会不同。所以这样的表达式应该被拆成若干个表达式。

小案例交换变量

要求:将两个变量的值进行互换

#include<stdio.h>
int main()
{
  int a=5;
  int b=6;
  int t;
  t=a;
  a=b;
  b=t;
  printf("a=%d,b=%d\n",a,b);
  return 0;

}