等于运算符(==)优先级高于按位与运算符(&)

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

游戏里的物品是否可出售是根据服务端下发的配置信息来判断,它有一个整形值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……………………………………………………………………………………………..*/

posted @ 2012-11-10 21:11  fjut  Views(653)  Comments(0Edit  收藏  举报
------------------->>>>      听首歌放松下 O(∩_∩)O~~