`
lirenjiede
  • 浏览: 13697 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

位运算符的一些用途

 
阅读更多

概述

位运算是对二进制数进行运算。

java中的位运算符有[&, |, ^, ~, <<, >>, >>>],其中[~]是一元运算符,其余为二元运算符,二元运算符还有相应的赋值运算操作符[&=, |=, ^=, >>=, >>>=, <<=]。

java中,位运算的操作数只能为整型,布尔型和字符型。根据占用的字节数由小到大分别为:boolean, byte, char, short, int, long。

 


 

用途

 

用途之一:计算

既然是运算符,首要功能当然是运算了。使用位运算符进行运算,会在很多时候给我们带来不可思议的便利。

如:左移一位相当于除以2;右移一位相当于除以2。

 

用途之二:flag

由于位运算符都是对二进制数进行运算,所以我们也可以利用这一点来做为区分各种不同情况的flag。

下列代码就是一个简单的示例应用。对于一个java文件来说,它有以下几种 modifier:[public, package, protected, private, static, abstract, final]等等。这些modifier中,有些是可以同时存在的(如:public和static),有些则是互斥的,也就是说只能出现一种 (如:public和private)。

那么我们就可以对这些modifier进行分类,分类的方法就是让它们每一个都 占据一个二进制位。下列代码中,public占据了低位第一个二进制位,而private则占据了低位第4个二进制位。使用这种分类方法,我们就可以很轻 松的判断是否包含某一个modifier,也可以判断是否包含一系列modifier。如下列代码中的isPublic(int)和 hasModifier(int)。

这种用法还可以用在权限管理系统,因为权限系统也会有这种类似的部分可以同时具有,部分必须是互斥的需求。

 

package bit;

public class ModifierBase {
    public static int PUBLIC = 0x0001;
    public static int PACKAGE = 0x0002;
    public static int PROTECTED = 0x0004;
    public static int PRIVATE = 0x0008;
    public static int STATIC = 0x0010;
    public static int ABSTRACT = 0x0020;
    public static int FINAL = 0x0040;
    
    private int modifier = 0;
    
    public ModifierBase(int modifier) {
        this.modifier = modifier;
    }
    
    public boolean isPublic() {
        return (this.modifier & PUBLIC) != 0;
    }
    
    public boolean isPackage() {
        return (this.modifier & PACKAGE) != 0;
    }
    
    public boolean isProtected() {
        return (this.modifier & PROTECTED) != 0;
    }
    
    public boolean isPrivate() {
        return (this.modifier & PRIVATE) != 0;
    }
    
    public boolean hasModifier(int modifier) {
        return (this.modifier & modifier) == modifier;
    }
    
    public boolean hasnotModifier(int modifier) {
        return (this.modifier & modifier) == 0;
    }
    
    public static void main(String[] args) {
        int modifiers1 = PUBLIC | PROTECTED;
        int modifiers2 = PUBLIC | PROTECTED | PRIVATE;
        ModifierBase base = new ModifierBase(modifiers2); // base is [PUBLIC | PROTECTED | PRIVATE]
        System.out.println(base.hasModifier(modifiers1)); // true because base includes [PUBLIC | PROTECTED]
        ModifierBase base2 = new ModifierBase(modifiers1); // base is [PUBLIC | PROTECTED]
        System.out.println(base2.hasModifier(modifiers2)); // fasle because base2 donot includes [PRIVATE]
    }
}

 原文引自http://blog.csdn.net/superbeck/article/details/5387476

 

分享到:
评论

相关推荐

    Java位运算符详解[文].pdf

    Java中的位运算符是编程语言中用于操作整数在二进制表示下的基本逻辑运算,它们在处理二进制数据时特别有用。本文主要讲解了Java中的几种位运算符及其应用。 1. **按位与运算符(&)**: - 这个运算符对两个数的每...

    C语言位运算符与或异或取反左移和右移.pdf

    按位与的用途: * 清零:若想对一个存储单元清零,即使其全部二进制位为0,只要找一个二进制数,其中各个位符合一下条件:原来的数中为1的位,新数中相应位为0。然后使二者进行&运算,即可达到清零目的。 * 取一个...

    C语言位运算符[参考].pdf

    位运算符在编程中有很多用途,如数据掩码、位字段提取、内存对齐、效率优化等。它们可以用于解决不使用额外变量进行数值交换的问题,例如,要交换两个变量a和b的值,可以使用位运算: ```c a = a ^ b; b = a ^ b; a...

    C语言位运算符:与、或、异或、取反.pdf

    位运算在编程中有多种用途,比如: - 清零:通过与特定的掩码(对应位置为0的位)进行按位与运算,可以将某数的特定位清零。 - 设置位:通过与一个特定的掩码(对应位置为1的位)进行按位或运算,可以将某数的特...

    C语言中的逻辑运算符

    )和按位取反运算符(~),以及前缀增量(++)和减量(--)运算符,正号(+)、负号(-),类型转换运算符(类型),指针运算符(*),地址运算符(&),长度运算符(sizeof)等,它们属于单目运算符。 3. 乘法(*)、除法(/)、取余(%)...

    C语言运算符表C语言运算符表C语言运算符表

    下面将详细解释C语言中的各类运算符及其用途。 1. **优先级**:运算符的优先级决定了运算的顺序。高优先级的运算符先进行计算。例如,乘法(*)、除法(/)和模运算(%)的优先级高于加法(+)和减法(-)。括号(...

    C语言运算符和关键字

    本文将详细介绍C语言中的运算符及其特性,并简要提及C语言的一些关键概念。 #### 运算符概述 C语言中的运算符根据操作数的数量可分为以下几类: 1. **一元运算符**:仅作用于一个操作数。如 `!` (逻辑非)、`~` ...

    ES6扩展运算符的用途实例详解

    ES6扩展运算符的用途实例详解 ES6扩展运算符是ECMAScript 6(ES6)中引入的一种新的语法结构,主要用途是将实现了Iterator 接口的对象中的每个元素一个个迭代并取出来变成单独的被使用。扩展运算符的主要用途有多...

    C++位运算符详解(异或运算符和移位运算符)

    在C++编程语言中,位运算符是一种对整数类型的二进制表示进行操作的运算符。它们在处理底层数据和实现高效的算法时非常有用。本文将深入探讨两种特殊的位运算符:异或运算符(^)和移位运算符(和 &gt;&gt;)。 首先,让...

    java特殊运算符

    以上就是Java中的一些特殊运算符及其用途,了解并熟练运用这些运算符能帮助我们写出更高效、更简洁的代码。在实际编程中,结合标签"源码"和"工具",我们可以利用这些知识深入理解Java库的内部实现,以及开发更强大的...

    C语言运算符表.pdf

    C语言的运算符还涉及一些特殊用途的运算符,例如sizeof运算符可以得到数据类型或变量的大小,以字节为单位。单目运算符&是取地址运算符,用于获取变量的内存地址。 C语言的运算符优先级和结合性决定了在没有括号的...

    C++中不能重载的运算符

    ### C++中不可重载的运算符及其规则 ...总结来说,虽然C++允许重载大多数运算符,但为了保持语言的一致性和清晰度,有一些关键运算符是不允许被重载的。了解这些限制有助于编写更加安全和易于理解的代码。

    浅谈python运算符运算法则(csdn)————程序.pdf

    Python 中的运算符可以分为七大类,每类都有其特定的功能和用途。 二、算术运算符 算术运算符是用于执行常见的数学运算的符号。Python 中的算术运算符包括加法、减法、乘法、除法、取余、幂运算等。例如: * 加法...

    【Python学习笔记】第四章 运算符.pdf

    运算符可以根据它们的用途和执行的操作被分类为不同的类型。本文档,即标题为“【Python学习笔记】第四章 运算符.pdf”的内容,详细介绍了Python中的各种运算符及其使用方法。以下是对文档中提到的知识点的详细解释...

    C# 运算符 大全

    ### C# 运算符大全 C# 是一种现代面向对象的编程语言,它提供了丰富的运算符以支持各种数据处理需求。...以上内容涵盖了 C# 中常用的一些运算符及其使用方式。理解和掌握这些运算符是编写高效和可靠的 C# 程序的基础。

    SQL和C#运算符.doc

    以下是一些主要的C#运算符: - **一元运算符**:`+`(正数),`-`(负数),`!`(逻辑非),`~`(按位非),`++`(自增),`--`(自减),`(T)`(类型转换)。 - **二元运算符**:`+`(加法和字符串连接),`-`...

    《C语言运算符》pdf版

    通过对C语言中不同运算符的分析可以看出,每种运算符都有其独特的功能和用途。了解并熟练掌握这些运算符的特点对于编写高效的C语言程序至关重要。此外,理解运算符的优先级和结合性有助于避免常见的错误,并提高代码...

    Python 运算符.doc

    这些运算符可以分为多种类型,每种都有其独特的功能和用途。让我们逐一深入探讨这些运算符。 首先,我们有**算术运算符**,它们用于基本的数学计算。例如,"+"用于加法,"-"用于减法,"*"用于乘法,"/"用于除法,"%...

Global site tag (gtag.js) - Google Analytics