查看: 1744|回复: 0
打印 上一主题 下一主题

括号改变优先级。

[复制链接]
跳转到指定楼层
沙发
发表于 2015-9-24 08:14:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
括号改变优先级。
        C语言的加减乘除,与或取反,左移右移等运算符是有严格优先级顺序的,但是我本人记忆力有限,做项目哪能记住这么多优先级的前后顺序,只是大概明白乘除的优先级比加减的优先级高,其它方面真的记不住那么多,怎么办?为了确保万一,我用到了括号。
       括号的用法跟我们日常的数据运算公式的用法一直,先运行括号里面的运算,再执行其它运算。比如:
a=a<<2+5;
       到底是先把变量a左移2位后再加5,还是先2加5等于7再让变量a左移7位?对于像我这样不能熟记C语言运算优先级顺序的人,这条语句很容易让我搞混。但是加上括号就明了:
a=(a<<2)+5;
a=a<<(2+5);
      不用多说,加上括号后,上述两行代码传递了清晰的优先级顺序。再看一个例子:
c=1+3*c;
      到底是1加3的结果再乘以变量c,还是3乘以变量c的结果再加1?因为我记得乘除法的优先级比加减法的优先级高,所以答案是3乘以变量c的结果再加1。对于初学者,为了避免出错,可以加上括号就更加清晰了,比如:
c=(1+3)*c;
c=1+(3*c);
      加括号后,优先级顺序一目了然。

      现在编写一个程序来练习刚才讲到的主要内容,最后把程序编译后下载到坚鸿51学习板观察结果。请直接复制第十节模板程序,修改的main程序代码如下:

void main() //主程序
{
/*---C语言学习区域的开始---------------------------------------------------------------------------*/

  unsigned char a=0x01;
  unsigned char b=0x01;

  unsigned char c=0x02;
  unsigned char d=0x02;


  a=(a<<2)+5;  //a左移2位后变成4,再加5等于9
  b=b<<(2+5);  //2加5等于7,b再左移动7位等于128

  c=(1+3)*c;  //1加3等于4,再乘以变量c等于8
  d=1+(3*d);  //3乘以d等于6,再加1等于7


  GuiWdData0=a;   //把a这个变量放到窗口变量0里面显示
  GuiWdData1=b;   //把b这个变量放到窗口变量1里面显示
  GuiWdData2=c;   //把c这个变量放到窗口变量2里面显示
  GuiWdData3=d;   //把d这个变量放到窗口变量3里面显示


/*---C语言学习区域的结束---------------------------------------------------------------------------*/
   while(1)  
   {
      initial();
      key_service();
      display_service();
   }

}
复制代码

        查看运算结果的方法。如何在坚鸿51学习板上观察变量?按下S1或者S5按键即可切换显示不同的窗口,从而显示不同的变量。按下S9按键不松手就可以切换到十六进制的显示界面,松开手后会自动切换到十进制的界面。16个LED灯显示的就是当前变量的二进制数,亮代表1,灭代表0。上坚鸿51学习板观察程序执行的结果如下:
       变量a为9。
       变量b为128。
       变量c为8。
       变量d为7。
      下节预告:if判断语句和等于关系符“==”。
     (未完待续)
回复转载

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入中科因仑

本版积分规则

快速回复 返回顶部 返回列表