`

java位操作应用一则

    博客分类:
  • Java
阅读更多
这里我写了一个基类, 来对选项进行位操作.
采用位来作为判断是否包含某个选项, 而所有的选项常量都采用"1<<n"来定义, 即2的n次方
public abstract class BaseOption {

	public long options; // 选项合集

	/**
	 * 添加选项
	 * 
	 * @param option
	 * @return
	 */
	@SuppressWarnings("unchecked")
	public <T extends BaseOption> T add(long option) {
		if ((option & (option - 1)) != 0) {
			throw new IllegalArgumentException("option必须为2的n次方");
		}
		this.options = this.options | option;
		return (T) this;
	}

	/**
	 * 删除选项
	 * 
	 * @param <T>
	 * @param option
	 * @return
	 */
	@SuppressWarnings("unchecked")
	public <T extends BaseOption> T remove(int option) {
		if ((option & (option - 1)) != 0) {
			throw new IllegalArgumentException("option必须为2的n次方");
		}
		options = this.options & (option ^ Long.MAX_VALUE);
		return (T) this;
	}

	/**
	 * 是否包含选项
	 * 
	 * @param option
	 * @return
	 */
	public boolean contains(long option) {
		return ((this.options & option) == option);
	}

	public static void main(String[] args) {
		BaseOption co = new BaseOption() {};
		co.options = 2;
		co.add(2);
		Assert.assertEquals(2, co.options);
		co.options = 4;
		co.add(2);
		Assert.assertEquals(6, co.options);
		co.add(1);
		Assert.assertEquals(7, co.options);
		co.add(1);
		Assert.assertEquals(7, co.options);
		co.add(0);
		Assert.assertEquals(7, co.options);
		try {
			co.add(6);
			Assert.fail();
		}catch (Exception e) {
		}
		co.remove(1);
		Assert.assertEquals(6, co.options);
		co.remove(2);
		Assert.assertEquals(4, co.options);
		co.remove(4);
		try {
			co.remove(6);
			Assert.fail();
		}catch (Exception e) {
		}
		Assert.assertEquals(0, co.options);
		co.remove(4);
		Assert.assertEquals(0, co.options);
		System.out.println("test is successful!");
	}
}
分享到:
评论
2 楼 harry 2009-02-09  
位操作在二进制数的基础上思考就很简单了
1 楼 harry 2009-02-09  
用位串来做flag是比较常用的,呵呵

相关推荐

    java位运算符之左移操作视频

    “java位运算符之左移操作视频”可能是一个教学资源,通过观看这个视频,学习者可以更直观地了解Java中左移操作的使用方法和实践案例。配合“视频文字.txt”,可以对视频内容进行文字记录和复习,加深理解。 六、...

    java64位jdk

    64位版本的Java JDK针对64位操作系统,这种系统能够处理更大的内存地址空间,允许Java应用程序利用更多的RAM。这对于处理大数据、复杂的多线程应用或需要大量内存的高性能计算至关重要。相比32位版本,64位Java可以...

    java安装包(windows 32位)

    本文将详细讨论针对Windows 32位操作系统的Java安装包,以及如何进行安装。 标题"java安装包(windows 32位)"指的是专门为32位Windows系统设计的Java Development Kit(JDK)的安装程序。JDK是Java编程的基础,它...

    luajava1.1 64位版本和32位版本

    luajava-1.1-x64-lua51.zip则是64位版本,适用于64位操作系统。解压后同样需要按照readme.txt中的指导进行安装。需要注意的是,64位版本的luajava不能在32位操作系统上运行,反之亦然。 在使用luajava时,可以通过...

    Java——jdk1.8(64位和32位)

    32位JDK则适用于32位操作系统,内存管理有限,但能兼容更多的32位应用程序。选择哪种版本取决于你的操作系统的架构。 4. **Lambda表达式**:Java 8引入的最重要的特性之一,它允许以简洁的方式表示匿名函数。Lambda...

    java jdk 32位

    Java JDK 32位是Java开发环境中不可或缺的部分,主要用于32位操作系统的编程工作,尤其适合那些仍需在旧系统上运行或开发的项目。Java JDK(Java Development Kit)是Oracle公司提供的Java语言开发工具包,它包含了...

    JAVA位运算.pdf

    ### JAVA位运算详解 在Java编程中,位运算是一门精细的艺术,涉及到对整数类型的二进制位进行直接操作。这些操作不仅能够优化代码执行效率,还常用于实现特定的算法需求。本文将深入探讨Java中的位运算,包括位...

    JAVA算法应用

    9. **位运算**:Java中的位运算常用于高效的位操作,如在空间限制严格的情况下进行数据处理。 10. **字符串处理**:Java提供了丰富的字符串处理API,如模式匹配、字符串反转、子串查找等,这些都是算法中常见的问题...

    Java jdk 86位软件下载

    Java JDK(Java Development Kit)是Java编程语言的软件开发工具包,是开发和运行Java应用程序的基础。...下载和正确安装Java JDK是进行Java开发的第一步,而熟悉其包含的各种工具和库则是提升开发效率的关键。

    JavaService-2.0.10 32位,64位

    JavaService-2.0.10 是一个针对Java应用程序的服务包装工具,它允许开发者将Java应用程序作为Windows服务来运行。这个版本提供了32位和64位两种版本,以适应不同操作系统环境的需求。 在Windows系统中,服务是一种...

    JAVA的缓存应用介绍

    总的来说,Java缓存的应用是提升系统性能的关键策略之一。了解Java内存体系和有效使用缓存框架,能够帮助开发者创建更高效、更稳定的系统,同时避免因内存管理不当导致的问题。正确设置JVM内存参数和使用内存检查...

    Java运行环境64位

    64位版本的JRE是专为64位操作系统设计的,能够充分利用现代计算机硬件的内存资源,提高大型Java应用的性能。 首先,让我们来了解一下Java平台的组成。Java平台分为三个主要部分:Java虚拟机(JVM)、Java类库和开发...

    Java64位SWT

    在64位操作系统上,Java64位SWT是为了确保应用程序能够充分利用64位系统的内存和处理能力。64位环境下的Java虚拟机(JVM)能够处理更大的数据类型和更大的内存地址空间,这对于需要大量内存或者高性能计算的应用来说...

    java jdk 8 64位

    Java JDK 8 64位是Java开发工具集的一个重要版本,特别针对Windows操作系统设计,为64位架构提供支持。这个版本的JDK(Java Development Kit)是Oracle公司发布,用于开发和运行Java应用程序的基础平台。在Java编程...

    java7 32+64位安装包下载

    32位和64位版本的区别在于它们分别对应于不同的操作系统架构,32位适用于32位操作系统,64位则用于64位操作系统。用户应根据自己的系统类型选择合适的版本安装,以确保Java程序能够正常运行。 2. **JVM(Java ...

    java_tomcat7.0 32位

    它免除了传统安装过程,提供了便携式的使用方式,使得开发者和系统管理员能够在任何支持32位操作系统的计算机上快速部署和运行Java Web应用程序。以下是关于Java Tomcat 7.0 32位的关键知识点: 1. **Tomcat概述**...

    exe4j+Java版本32位和64位

    32位JRE可以在32位操作系统上运行,而64位JRE则适用于64位操作系统。主要区别在于内存管理和处理器指令集的优化。64位版本通常能够利用更多的内存,对于内存密集型应用来说性能更优。 2. **exe4j与32位/64位兼容性*...

    Java操作注册表插件

    reg.dll通常是32位版本的注册表操作库,而reg_x64.dll则是64位版本,它们包含了用于读写注册表的函数。 在实际应用中,Java操作注册表插件可能有以下常见用途: 1. 应用程序配置:软件可以将设置保存到注册表,以...

    java IO应用

    Java NIO(New IO)从Java 1.4版本开始引入,提供了一种基于通道(Channel)和缓冲区(Buffer)的新型IO模型,支持非阻塞读写,适用于高并发、低延迟的IO应用。 10. **文件系统接口** Java 7引入了Files类和Path...

    Java中的位运算

    - **按位或(|)**:如果两个相应位中有任意一位为1,则结果位为1;否则为0。 - **按位异或(^)**:如果两个相应位不同,则结果位为1;否则为0。 - **按位取反(~)**:将每个位取反,即0变1,1变0。 - **左移位...

Global site tag (gtag.js) - Google Analytics