最近在游戏项目中又有用bit值来表示状态的需求,比如在一个房间内,用一个byte表示四个位置的准备状态,或是四个位置的开闭状态。在房间开始游戏的时候需要判断是否所有的玩家都处于准备状态,此时即可以判断相应位置是否为1值即可。
对于这类开关状态的需求,可以实现的方法有很多,用一维数组存放状态、用二维数组存放位置和状态;或者用键值对存放位置和状态都可以。
但考虑到运算的快捷性以及运算结果发送至客户端的网络数据包大小,使用bit值的方法显然对于上面所述的方法有更大的优势。
关于位运算的操作符的含义及计算原理这里就不详说了,下面这个文章说的很详细有不明白的可以看看。
http://blog.csdn.net/morewindows/article/details/7354571
下面的工具类提供了几个位运算相关的方法,代码用java写的,做项目的时候顺带翻译成了AS3,赶脚也没什么问题。
希望各位看官多多指正!
/**
* Java 位运算的常用方法封装<br>
*
* @author Jian
* @date 2012-12-7
*
*/
public class BitUtils {
/**
* 获取运算数指定位置的值<br>
* 例如: 0000 1011 获取其第 0 位的值为 1, 第 2 位 的值为 0<br>
*
* @param source
* 需要运算的数
* @param pos
* 指定位置 (0<=pos<=7)
* @return 指定位置的值(0 or 1)
*/
public static byte getBitValue(byte source, int pos) {
return (byte) ((source >> pos) & 1);
}
/**
* 将运算数指定位置的值置为指定值<br>
* 例: 0000 1011 需要更新为 0000 1111, 即第 2 位的值需要置为 1<br>
*
* @param source
* 需要运算的数
* @param pos
* 指定位置 (0<=pos<=7)
* @param value
* 只能取值为 0, 或 1, 所有大于0的值作为1处理, 所有小于0的值作为0处理
*
* @return 运算后的结果数
*/
public static byte setBitValue(byte source, int pos, byte value) {
byte mask = (byte) (1 << pos);
if (value > 0) {
source |= mask;
} else {
source &= (~mask);
}
return source;
}
/**
* 将运算数指定位置取反值<br>
* 例: 0000 1011 指定第 3 位取反, 结果为 0000 0011; 指定第2位取反, 结果为 0000 1111<br>
*
* @param source
*
* @param pos
* 指定位置 (0<=pos<=7)
*
* @return 运算后的结果数
*/
public static byte reverseBitValue(byte source, int pos) {
byte mask = (byte) (1 << pos);
return (byte) (source ^ mask);
}
/**
* 检查运算数的指定位置是否为1<br>
*
* @param source
* 需要运算的数
* @param pos
* 指定位置 (0<=pos<=7)
* @return true 表示指定位置值为1, false 表示指定位置值为 0
*/
public static boolean checkBitValue(byte source, int pos) {
source = (byte) (source >>> pos);
return (source & 1) == 1;
}
/**
* 入口函数做测试<br>
*
* @param args
*/
public static void main(String[] args) {
// 取十进制 11 (二级制 0000 1011) 为例子
byte source = 11;
// 取第2位值并输出, 结果应为 0000 1011
for (byte i = 7; i >= 0; i--) {
System.out.printf("%d ", getBitValue(source, i));
}
// 将第6位置为1并输出 , 结果为 75 (0100 1011)
System.out.println("\n" + setBitValue(source, 6, (byte) 1));
// 将第6位取反并输出, 结果应为75(0100 1011)
System.out.println(reverseBitValue(source, 6));
// 检查第6位是否为1,结果应为false
System.out.println(checkBitValue(source, 6));
// 输出为1的位, 结果应为 0 1 3
for (byte i = 0; i < 8; i++) {
if (checkBitValue(source, i)) {
System.out.printf("%d ", i);
}
}
}
}
分享到:
相关推荐
Java中的位运算是一种高效的操作方式,它可以直接对二进制数据进行操作,广泛应用于各种算法和数据处理中。本文将详细介绍这些位运算的应用,并通过具体的例子来解释它们的工作原理。 1. **奇偶数判断**:`a&1`可以...
### JAVA位运算详解 在Java编程中,位运算是一门精细的艺术,涉及到对整数类型的二进制位进行直接操作。这些操作不仅能够优化代码执行效率,还常用于实现特定的算法需求。本文将深入探讨Java中的位运算,包括位...
Java位运算是一种底层操作,它直接作用于二进制位,是计算机科学中的基础操作。在Java编程中,位运算可以用于高效地处理数据,尤其是在处理数组、位集或者进行低级优化时非常有用。本篇文章将深入探讨Java中的位运算...
位运算在Java编程中是底层操作,用于直接处理二进制数据,对于理解计算机内部机制和优化代码性能至关重要。本文将深入探讨位运算的相关知识,包括计算机中数据的表示方法、二进制计数系统、以及原码、反码和补码的...
### Java中的位运算知识点 #### 一、位运算概述 位运算是计算机科学中的一个基本概念,它直接针对二进制位进行操作。在Java语言中,提供了多种位运算符来处理二进制数据,这对于优化算法性能、提高程序效率等方面...
Java位运算在编程中是一种非常基础且强大的操作,它直接作用于二进制位,能够进行高效的数值处理和数据操作。本文将深入讲解Java中的位运算,并通过雪花算法的应用实例来进一步阐述其重要性和用法。 1. **位运算...
Java位运算大全不仅介绍基本的位运算知识,而且强调了位运算在Java编程中的重要性,指出了在实际开发过程中应该注意的细节问题,以及在特定场景下位运算的应用技巧,从而帮助开发者更加高效地利用位运算解决实际问题...
Java中的异或运算是一种基本的逻辑运算,它在编程中有着广泛的应用,特别是在位操作、数据加密、数据校验等领域。...掌握异或运算是提升编程技能的重要一步,特别是在处理位操作、优化代码和理解底层机制时。
在Java编程语言中,异或运算(XOR)是一种二进制操作,它在信息安全和数据加密领域有广泛应用。本文将深入探讨Java中的异或运算及其在简单加密和解密中的应用。 首先,异或运算是基于二进制位的运算。如果两个位...
在本案例中,我们将深入探讨八大类运算符:算数运算、赋值运算、逻辑运算、关系运算、自增运算、自减运算、条件运算以及位运算。这些运算符在编写Java代码时频繁使用,理解并熟练掌握它们对于编写高效、简洁的程序至...
“java位运算符之左移操作视频”可能是一个教学资源,通过观看这个视频,学习者可以更直观地了解Java中左移操作的使用方法和实践案例。配合“视频文字.txt”,可以对视频内容进行文字记录和复习,加深理解。 六、...
Java语言基础中的位运算在计算机科学中扮演着重要的角色,特别是在低级别的数据操作和优化算法时。位运算是指在二进制级别上对数据进行的操作,这些操作直接作用于单个比特(bit)。理解位运算对于深入学习计算机...
1. Java的位运算符和位运算,包括基本操作和实际应用。 2. 使用Java构建图形用户界面,可能涉及Swing或JavaFX库,以及组件的使用和事件处理。 3. Eclipse IDE的使用,包括项目配置和构建过程。 4. 对象导向编程,...
Java位操作是编程中一种高效的计算方式,尤其在处理二进制数据、节省内存或进行高效计算时。本文将深入探讨Java中的位操作,并通过实际示例解释它们的工作原理和应用。 位操作主要包括:按位与(&),按位或(|),按位...
视频"java位运算符&AND操作视频.exe"可能包含一系列示例,演示了如何在实际代码中使用位AND运算符。通过观看这样的视频教程,开发者可以更直观地理解这个概念,并学习如何在Java程序中应用。 同时,"视频文字.txt...
位运算是指对二进制数进行操作,包括左移、右移、按位与、按位或、按位异或和按位非。在这个实验中,我们的任务是用位运算将一个数扩大100倍。位左移运算可以实现快速乘法,因为每个位向左移动一位相当于乘以2。因此...
Java中的位运算是一种高效的操作,它是直接针对二进制位进行操作的,因为CPU原生支持,所以在某些特定场景下,比如加密算法和图形处理,使用位运算能显著提升程序性能。位运算符包括右移(>>>),左移(),无符号右移(>>)...
六、实际应用 这种按位取与或的UDAF在大数据分析中非常有用,例如在处理二进制标志字段时,可以快速地统计满足特定条件的记录数量,或者找出所有可能的组合。 总结来说,实现“hive udaf 实现按位取与或”涉及到...
Java中的异或运算是一种基本的逻辑运算,它在编程中有着广泛的应用,特别是在位操作、密码学、数据校验等领域。下面将详细讲解Java异或的概念、运算规则以及相关的运算定理。 首先,异或(XOR)运算的核心概念是...