zoukankan      html  css  js  c++  java
  • 等于运算符(==)优先级高于按位与运算符(&)

    前几天在项目里碰到的问题,记录下。

    游戏里的物品是否可出售是根据服务端下发的配置信息来判断,它有一个整形值WordItems,物品是否可出售是根据WordItems转换为二进制时的第5位(从低位算起)来判断,0为可以出售、1为不可出售。我当时是这么判断的:

    //隐藏或者绑定 不可卖
    if (it->WordItems & 16 == 0 && it->Locked == 1)
    {
        tmpPackData.bIsCanSold = true;
    }

    我发现商店里的物品都不能出售,单步得到的WordItems值并转为二进制时第5位是0,it->Locked == 1时也不能出售,开始还以为是服务端的判断条件写错了,在确认服务端的判断条件没错后,自己再认真检查判定条件,才发现是运算符优先级问题,等于运算符(==)优先级高于按位与运算符(&)。

    在上面的判定表达式中由于==优先级高于&,首先计算 16 == 0 为false 返回0,0再和it->WordItems与运算值肯定为0了,so整个判断表达式为false。所有的商品都不能出售了。

    解决办法加圆括号(高优先级)限定:

    //隐藏或者绑定 不可卖
    if ( (iter->WordItems & 16) == 0 && it->Locked == 1 )
    {
        tmpPackData.bIsCanSold = true;
    }

    /*……………………………………………………………………………fjut……………………………………………………………………………………………..*/

  • 相关阅读:
    清除浮动的方法
    手机端横竖屏切换,怎么做才能安卓浏览器及时改变字体大小
    css z-index之object flash修正
    解决Flash挡住层用z-index无效的问题
    css垂直居中
    自定义selsct
    基础导航条
    按钮下拉菜单
    pandas的使用
    数据分析、人工智能开篇
  • 原文地址:https://www.cnblogs.com/fjut/p/2764462.html
Copyright © 2011-2022 走看看