各运算符的运算优先级

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

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

转载于:https://www.cnblogs.com/fhyfhy/p/5522549.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值