• 各运算符的运算优先级


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

          假设 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

  • 相关阅读:
    梳理NLP预训练模型
    听懂NLPer说的是啥
    自然语言处理之HMM模型分词
    入门自然语言处理(NLP)的门
    js轮播图
    js中for循环this的使用
    vue-cli3的vue.config.js配置信息
    vuex的commit、payload、actions、setter、mutations等方法案例
    Vue做数据和视图原理(数据劫持)
    fetch的使用方法(基于promise方法进行增删改查)
  • 原文地址:https://www.cnblogs.com/fhyfhy/p/5522549.html
Copyright © 2020-2023  润新知