java中通过位运算实现多个状态的判断
通过 << | & ~ 位运算,实现同时拥有多个状态
通过 << 定义数据的状态
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中通过位运算实现多个状态的判断的更多相关文章
- C#中通过位运算实现多个状态的判断
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- Java中的位运算及简单的算法应用介绍
众所周知,计算机底层是二进制.而java作为一门计算机编程语言,也对二进制的位运算提供了完整的支持. 在java中,int是32位的,也就是说可以用来实现32位的位运算.方便起见,我们一般用16进制对 ...
- Java中的位运算
昨天去面试的时候做到了一道Java的位运算题目,发现有个运算符不懂:">>>",今天特地查了一下,并小结一下常见的位运算符号: ~ 按位非(NOT)(一元运算) ...
- Java中关于位运算的面试题
位运算的效率是最高的,因为位位运算是直接对二进制进行操作 位运算只能应用于整型和char类型(char类型可以看做是特殊的无符号的整形) 面试题: a: 判断一个数是否是奇数 a & 1 == ...
- java中的位运算及移位运算
为了方便对二进制位进行操作,Java给我们提供了以下四个二进制位操作符: & 按位与 | 按位或 ^ 按位异或 ~ 按位取反 Java中有三个移位运算符: 左移:&l ...
- Java二进制和位运算,这一万字准能喂饱你
基础不牢,地动山摇.本文已被 https://www.yourbatman.cn 收录,里面一并有Spring技术栈.MyBatis.JVM.中间件等小而美的专栏供以免费学习.关注公众号[BAT的乌托 ...
- Java中的位掩码BitMask
目录 JDK源码的使用 日常工作中的使用 JDK源码的使用 最近在JDK源码中闲逛,无意中看到了java.lang.reflect.Modifier这个类,这个类很简单,都是些常量定义和判断方法,于是 ...
- Java中的递归运算
Java中的递归运算是一种在自己的方法内部调用自己的方法 递归的设计思想是:把一个复杂的问题,分解为若干个等同的子问题,重复执行,直到之问题能够简单到直接求解,这样复杂的问题就得以解决. 递归运算有两 ...
- PHP中的位运算与位移运算(其它语言通用)
/* PHP中的位运算与位移运算 ======================= 二进制Binary:0,1 逢二进1,易于电子信号的传输 原码.反码.补码 二进制最高位是符号位:0为正数,1为负数( ...
随机推荐
- gcviewer待整理
官网:https://github.com/chewiebug/GCViewer G1 Gabage Collector -XX:+UnlockExperimentalVMOptions -XX:+U ...
- Xcode 7安装KSImageNamed失败解决方法
## How do I use it? Build the KSImageNamed target in the Xcode project and the plug-in will automati ...
- js阻止浏览器默认行为
js阻止浏览器默认行为 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> & ...
- nginx http跳转到https
server { listen 80; server_name www.888.com; location / { #index.html放在虚拟主机监听的根目录下 root /usr/local/n ...
- 通过Profiles查看create语句的执行时间消耗 (转)
一,查看profiles的状态值 1,查看profiles是否已经打开了,默认是不打开的. mysql> show profiles; Empty set (0.02 sec) my ...
- 支付宝客户端支付配置RSA公钥的问题错误,导致收不到回发通知
没收到通知的原因是你们的商户公钥上传地址弄错了,应该上传到合作伙伴管理,您上传到无线wap哪里了,把您的公钥,从无线wap哪里复制贴到合作伙伴管理即可
- Python中的日志管理Logging模块
1.基本的用法 import logging logging.debug('This is debug message') logging.info('This is info message') l ...
- 【linux】grub加密
1.计算grub的MD5加密密码: #grub-md5-crypt Password: Retype password:输入两遍密码进行确认以后,就会计算出你所输入密码的MD5加密值,如:$1$pFd ...
- isa class 帮助确定对象或变量的数据类型
isa class 帮助确定对象或变量的数据类型
- c#.net 调用BouncyCastle生成PEM格式的私钥和公钥
RsaKeyPairGenerator r = new RsaKeyPairGenerator(); r.Init()); AsymmetricCipherKeyPair keys = r.Gener ...