• 各运算符的运算优先级


         在一个设计遇到了一个这样的问题:

          假设 S = 40, B = 220, D = 1280, 那么想在一个计数器计数到 S+B 之前 Y = 0;  在S+B 到 S+B+(D的一半)的之间 Y = 1, 在  S+B+(D的一半)到 S+B+D 之间 Y = 2; 再之后就是Y = 0;

       于是这样写道:  if(cnt < S+B )  Y = 0;

                            else  if(cnt < S + B + D >>1 )  Y = 1 ;   // 0< cnt < 900

                            else if(cnt < S + B + D)           Y = 2;    //900< cnt <1540

                            else  Y = 0;

        然后 在板子上运行就发现不正常 ,最后查得  在  cnt = 770 的时候 Y值就变为2了,与预想的不符,怎么会这样?

      对比发现770 = 1540/2 ,难道在第二行 是在 S+B+D之和右移而不是 D右移之后再相加的 ?

       这就是运算符号的运算优先级的问题了,查资料,得到一个下面的表:

             

        果然是优先级的问题,忘记考虑了。

        根据优先级可以得到下面的公式;

          cnt =     S +B+D >>1   = 770;

           cnt =     S +B+(D >>1)   = 900;

           cnt =     S +B+D/2   = 900;   (乘除优先级高于加减)

       所以:

                 复杂运算可以分解为多个单式 。

                 复杂运算式可以 加括号 来确保优先级。

            http://www.cnblogs.com/fhyfhy/p/5522549.html

  • 相关阅读:
    js提取url参数的几种方法。(搜集)
    Sharepoint 权限
    Sharepoint身份模拟
    代码操作Sharepoint文档库(创建、上传附件)
    stsadm部署wsp包
    Sharepoint网站栏开发
    邮件发送
    Spsite.OpenWeb()
    Lua require 相对路径
    dropdownlist批量填充数据
  • 原文地址:https://www.cnblogs.com/fhyfhy/p/5522549.html
Copyright © 2020-2023  润新知