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为负数( ...
随机推荐
- DEBUG MYSQL
https://dev.mysql.com/doc/refman/5.7/en/porting.html https://dev.mysql.com/doc/refman/5.7/en/debuggi ...
- DDD, MVC & Entity Framework
https://digitalpolis.co.uk/software-thoughts/ddd-mvc-entity-framework/ Data Points - Coding for Doma ...
- AndroidStudio导入项目常见问题
问题一: 解决:少了依赖的路径 问题二: 解决:把runProguard 改成minfyEnable 来源:http://blog.csdn.net/pengkv/article/details/44 ...
- threading模块和queue模块实现程序并发功能和消息队列
简介: 通过三个例子熟悉一下python threading模块和queue模块实现程序并发功能和消息队列. 说明:以下实验基于python2.6 基本概念 什么是进程? 拥有独立的地址空间,内存,数 ...
- SVN server环境搭建
VisualSVN server搭建: 1. 下载VisualSVN server for Windows安装包:https://www.visualsvn.com/ 2. 安装过程,基本就是下一步一 ...
- mysql将字符转换成数字
在操作mysql时,经常需要将字符转换成数字,这一步虽然简单,但不常用的话也很容易忘记,现将在网上找到的方法记录如下: 1.将字符的数字转成数字,比如'0'转成0可以直接用加法来实现例如:将pony表 ...
- Java语言编码规范(Java Code Conventions)
Java语言编码规范(Java Code Conventions) 名称 Java语言编码规范(Java Code Conventions) 译者 晨光(Morning) 简介 本文档讲述了Java语 ...
- Js数组去重复取唯一值
function isBigEnough(element) { return element >= 10; } var filtered = [12, 5, 8, 130, 44].filter ...
- C#基础——Func和Action的介绍及其用法
Func是一种委托,这是在3.5里面新增的,2.0里面我们使用委托是用Delegate,Func位于System.Core命名空间下,使用委托可以提升效率,例如在反射中使用就可以弥补反射所损失的性能. ...
- Google Play开发者账号注册与失败申诉攻略
Google Play开发者账号注册与失败申诉攻略 这篇文章我在网上找了好久,是在Google play进行开发者账号注册方法,介绍的很详细.现在分享一下.[原文地址] 为了方便开发者们注册谷歌的官方 ...