zoukankan      html  css  js  c++  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.

    示例1:常量或Enum定义

        public static final int CIV_EMAIL_SYNCED   = 1 << 0;
        public static final int CIV_USER           = 1 << 1; 
    
        public boolean isCIVUser ()
        {
            return (getFlags(Type.FB) & CIV_USER) > 0 || isTACIVUser();
        }
    
        public boolean isCIVUser ()
        {
            return (getFlags(Type.FB) & CIV_USER) > 0 || isTACIVUser();
        }

    示例2:权限操作

    public class BitAuthorityTest
    {
        public static final int OPERATOR_PLUS     = 1 << 0;
        public static final int OPERATOR_SUBTRACT = 1 << 1;
        public static final int OPERATOR_MULTIPLY = 1 << 2;
        public static final int OPERATOR_DIVIDE   = 1 << 3;
    
        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("0111", 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));
        }
    
    }

  • 相关阅读:
    服务器搭建纪录linux+mysql+nginx+php
    win7 64下安装mysql-python报错的解决办法
    jQuery treeview的简单用法
    不测的秘密:精准测试之路----读书笔记(第一章)
    [摘]ASP.Net标准控件(TextBox控件)
    让两个Div并排显示
    ScrollView里面添加ListView时,解决ListView的显示问题
    注册信息时,验证码的发送与验证
    头像图片上传到sd及服务器
    把图片转换成圆形图片
  • 原文地址:https://www.cnblogs.com/highriver/p/2608767.html
Copyright © 2011-2022 走看看