当前位置:编程学习 > JAVA >>

位操作与权限

1.

添加权限使用或
判断权限使用与
去掉权限用异或

 

2.
2.1为什么常量都是2的幂次,而不是随便的整数:保证一位一权限.方便与或等操作.这是使用位表示权限的前提。
2.2很多编程语言中,一组常量值都是以 0,1,2,4,8,16,32,64,比如java.sql.Connection接口中定义的常量值TRANSACTION_NONE....
2.3与运算之后移位的原因 :因为与操作后, 右边还出现有其他0,通过移位,结果就是0或1,能简化判断。注意移位与初始值时的移位一样。
2.4有几位就可以表示几种权限,32位可以表示32种权限。
2.4用异或去取消拥有的权限,注意添加权限使用或而不是异或,虽然0111添加1000的权限,或与异常的值是一样的。
异或操作: 1^0=1, 0^1=1, 1^1=0 ,  0^0=0

 

3.示例:权限操作

[java] 
/**
 * @author: 特种兵—AK47
 * @创建时间:2012-7-30 下午12:47:37
 * 
 * @类说明 :位运算与权限
 */ 
public class BitAuthorityTest { 
    public static final int OPERATOR_PLUS = 1 << 0; // 1  
    public static final int OPERATOR_SUBTRACT = 1 << 1;// 2  
    public static final int OPERATOR_MULTIPLY = 1 << 2;// 4  
    public static final int OPERATOR_DIVIDE = 1 << 3;// 8  
 
    public static void main(String[] args) { 
 
        System.out.println(OPERATOR_PLUS + "|" + OPERATOR_SUBTRACT + "|" + OPERATOR_MULTIPLY + "|" + OPERATOR_DIVIDE); 
        // 假设用户的权限对应的二进制串"0111",那么,想要判断用户是否拥有OPERATOR_DIVIDE  
        System.out.println((Integer.parseInt("1000", 2) & OPERATOR_DIVIDE) >> 3); 
        // 假设用户的权限对应的是整数,那么,想要判断用户是否拥有OPERATOR_DIVIDE  
        System.out.println((7 & OPERATOR_DIVIDE) >> 3); 
 
        // 如果想去掉用户拥有的某个权限.可以使用异或.  
        if ((7 & OPERATOR_MULTIPLY) >> 2 == 1) { 
            System.out.println("0111的去掉OPERATOR_MULTIPLY为:" + Integer.toBinaryString((7 ^ OPERATOR_DIVIDE))); 
        } 
        // 将二进制字符串转换成整数参与与或非,使用下页的方法.  
        System.out.println(Integer.parseInt("0111", 2)); 
        // 如果想将用户的整数权限转换成二进制串保存,使用如下方法置换.  
        System.out.println(Integer.toBinaryString(7)); 
    } 
 

补充:软件开发 , Java ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,