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……………………………………………………………………………………………..*/

  • 相关阅读:
    git常用命令
    IDEA设置
    redis基础
    SQL 基础
    springboot 配置日志 打印不出来sql
    阿里巴巴开发规范最新版
    rabbitmq用户权限
    rabbitMQ配置文件
    RabbitMQ配置文件(rabbitmq.conf)
    C++模板编程:如何使非通用的模板函数实现声明和定义分离
  • 原文地址:https://www.cnblogs.com/fjut/p/2764462.html
Copyright © 2011-2022 走看看