通过 <<  |  & ~ 位运算,实现同时拥有多个状态

通过 << 定义数据的状态

public interface LogConstants {
/**
* 消耗标记
*/
short COST_ASSET = 1 << 0;
short COST_GOLD = 1 << 1;
short COST_BINDGOLD = 1 << 2;
short COST_SOPH = 1 << 3;
short COST_STRSOUL = 1 << 4;
short COST_REFSOUL = 1 << 5;
short COST_SOULSTONE = 1 << 6;
short COST_AAMHID = 1 << 7;
short COST_REALM = 1 << 8;
}

通过 |= 加入多个状态

short mark = 0;
int costSoph = channel.getSoph();
if (costSoph > 0) {
mark |= LogConstants.COST_SOPH;
} if (costGold > 0) {
mark |= LogConstants.COST_GOLD;
}

通过 (m & LogConstants.COST_ASSET) > 0 判断是否拥有该状态

通过 m = (short) (m & ~LogConstants.COST_ASSET);扣除该状态

public void addCostLog(LogEvent event, Player player, short mark, int... args) {short m = mark;
for (int i : args) {
if ((m & LogConstants.COST_ASSET) > 0) {
m = (short) (m & ~LogConstants.COST_ASSET);
cost.setAsset(i);
} else if ((m & LogConstants.COST_GOLD) > 0) {
m = (short) (m & ~LogConstants.COST_GOLD);
cost.setGold(i);
} else if ((m & LogConstants.COST_BINDGOLD) > 0) {
m = (short) (m & ~LogConstants.COST_BINDGOLD);
cost.setBindGold(i);
} else if ((m & LogConstants.COST_SOPH) > 0) {
m = (short) (m & ~LogConstants.COST_SOPH);
cost.setSoph(i);
} else if ((m & LogConstants.COST_STRSOUL) > 0) {
m = (short) (m & ~LogConstants.COST_STRSOUL);
cost.setStrSoul(i);
} else if ((m & LogConstants.COST_REFSOUL) > 0) {
m = (short) (m & ~LogConstants.COST_REFSOUL);
cost.setRefSoul(i);
} else if ((m & LogConstants.COST_SOULSTONE) > 0) {
m = (short) (m & ~LogConstants.COST_SOULSTONE);
cost.setSoulStone(i);
} else if ((m & LogConstants.COST_AAMHID) > 0) {
m = (short) (m & ~LogConstants.COST_AAMHID);
cost.setAamhid(i);
} else if ((m & LogConstants.COST_REALM) > 0) {
m = (short) (m & ~LogConstants.COST_REALM);
cost.setRealm(i);
}
}
}

java中通过位运算实现多个状态的判断的更多相关文章

  1. C#中通过位运算实现多个状态的判断

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  2. Java中的位运算及简单的算法应用介绍

    众所周知,计算机底层是二进制.而java作为一门计算机编程语言,也对二进制的位运算提供了完整的支持. 在java中,int是32位的,也就是说可以用来实现32位的位运算.方便起见,我们一般用16进制对 ...

  3. Java中的位运算

    昨天去面试的时候做到了一道Java的位运算题目,发现有个运算符不懂:">>>",今天特地查了一下,并小结一下常见的位运算符号: ~  按位非(NOT)(一元运算) ...

  4. Java中关于位运算的面试题

    位运算的效率是最高的,因为位位运算是直接对二进制进行操作 位运算只能应用于整型和char类型(char类型可以看做是特殊的无符号的整形) 面试题: a: 判断一个数是否是奇数 a & 1 == ...

  5. java中的位运算及移位运算

    为了方便对二进制位进行操作,Java给我们提供了以下四个二进制位操作符: &    按位与 |     按位或 ^    按位异或 ~    按位取反 Java中有三个移位运算符: 左移:&l ...

  6. Java二进制和位运算,这一万字准能喂饱你

    基础不牢,地动山摇.本文已被 https://www.yourbatman.cn 收录,里面一并有Spring技术栈.MyBatis.JVM.中间件等小而美的专栏供以免费学习.关注公众号[BAT的乌托 ...

  7. Java中的位掩码BitMask

    目录 JDK源码的使用 日常工作中的使用 JDK源码的使用 最近在JDK源码中闲逛,无意中看到了java.lang.reflect.Modifier这个类,这个类很简单,都是些常量定义和判断方法,于是 ...

  8. Java中的递归运算

    Java中的递归运算是一种在自己的方法内部调用自己的方法 递归的设计思想是:把一个复杂的问题,分解为若干个等同的子问题,重复执行,直到之问题能够简单到直接求解,这样复杂的问题就得以解决. 递归运算有两 ...

  9. PHP中的位运算与位移运算(其它语言通用)

    /* PHP中的位运算与位移运算 ======================= 二进制Binary:0,1 逢二进1,易于电子信号的传输 原码.反码.补码 二进制最高位是符号位:0为正数,1为负数( ...

随机推荐

  1. 【转】修改 shellstyle.dll 权限

    原文网址:http://bbs.zol.com.cn/nbbbs/d160_147794.html 对于经常使用电脑的人来说,比如像最近的我,在晚上总觉得电脑资源管理器屏幕显示得太亮,即使我把电脑的亮 ...

  2. JSBinding+SharpKit / MonoBehaviour替换成JSComponent原理

    Unity 是基于组件式的开发,gameObject 身上可以绑定任意个脚本.每个脚本组成 gameObject 的一个部分. 脚本里通过添加预定义好的函数来执行自己的任务.比如Awake,用于初始化 ...

  3. CUDA中的流与事件

    流:CUDA流很像CPU的线程,一个CUDA流中的操作按顺序进行,粗粒度管理多个处理单元的并发执行. 通俗的讲,流用于并行运算,比如处理同一副图,你用一个流处理左边半张图片,再用第二个流处理右边半张图 ...

  4. Python_day8_面向对象(多态、成员修饰符、类中特殊方法、对象边缘知识)、异常处理之篇

    一.面向对象之多态 1.多态:简而言子就是多种形态或多种类型 python中不支持多态也用不到多态,多态的概念是应用与java/C#中指定传参的数据类型, java多态传参:必须是传参数的数据类型或传 ...

  5. 06-Java 本地文件操作

    1.File类简介 创建好:File file=new File("hello.txt"); 后,按住Ctrl键.单击File.会出现File的源代码. 在视图左下角双击" ...

  6. Q6: Binary Tree Preorder Traversal

    问题描述 Given a binary tree, return the preorder traversal of its nodes' values. For example:Given bina ...

  7. C#中的List<string>泛型类示例

    在C#代码中使用一系列字符串(strings)并需要为其创建一个列表时,List<string>泛型类是一个用于存储一系列字 符串(strings)的极其优秀的解决办法.下面一起有一些Li ...

  8. python之selenium

    selenium是处理异步加载的一种方法 总的来说是操作浏览器访问来获取自己想要的资料 优点是浏览器能看到的都能爬下来,简单有效,不需要深入破解网页加载形式 缺点是加载的东西太多,导致爬取速度变慢 # ...

  9. maven 常见错误解决

    1. maven打包编译时后台一直输出警告信息 [WARNING] File encoding has not been set, using platform encoding GBK, i.e. ...

  10. ORACLE 事务学习

    以下内容为本人的学习手记,有不足和理解错误的地方,请谨慎参考. 在ORACLE中的事务并不像MSSQL中的事务那样可以随意控制. ORACLE的事务是在进行数据第一次被修改后自动开启的无法显示的开启事 ...