java &|~<< 位运算设计权限代码!查询权限、增加权限、删除权限
2014-02-25 20:06
881 查看
java &|~<< 位运算设计权限代码!查询权限、增加权限、删除权限
关于二进制 转换 &|~^>><<>>> 请参考我前几篇博文
关于<<运算代码
关于二进制 转换 &|~^>><<>>> 请参考我前几篇博文
package org.rui.temp; public class Permission { /** * @author liangrui * @qq 1067165280 * 这种算法的一个优点是速度快 */ /****************************************** * 这是做测试相当于从数据库里取出的权限值 /一般根据一个模块id 取出它的crud 值就可以了 删除A---0 修改A---1 添加A---2 删除B---3 修改B---4 添加B---5 ...... 理论上可以有N个操作 用户有权限:添加A---2;删除B---3;修改B---4 2的2次方+2的3次方+2的4次方=28purview权限值 *******************************************/ static int purview=28; static int BdelPermi=3;//删除B=3 static int BaddPermi=5;//添加B=5 static int BupdaetPermi=5;//修改B==4 public static void main(String[] args) { //根据用户拥有的权限值,和功能模块的权限值来判断 用户是否拥有该操作模块的权限 isPermission(purview, BdelPermi, BaddPermi, BupdaetPermi); /** * purview 用户当前权限值 * newValue 权限值 * flag= true 为增加,false 删除 */ int modePermValue=3; //相关模块的id 这里做测试 就省略 //删除B---3 这里做测除测试 int newValue=3; boolean flag=false; //更改用户的权限 purview=setPermission(purview,modePermValue,newValue,flag); System.out.println("-------------修改权限后------------------------"); //再一次查询相关权限 isPermission(purview, BdelPermi, BaddPermi, BupdaetPermi); //添加B---5 这里做为用户增加一个权限 newValue=5; flag=true; //更改用户的权限 purview=setPermission(purview,modePermValue,newValue,flag); System.out.println("-------------修改权限后------------------------"); //再一次查询相关权限 isPermission(purview, BdelPermi, BaddPermi, BupdaetPermi); } private static void isPermission(int purview, int BdelPermi, int BaddPermi, int BupdaetPermi) { // 通过移位得到权限的二进制码 int Bdel=1<<BdelPermi; int Badd=1<<BaddPermi; int Bupd=1<<BupdaetPermi; //也可以写成 /*int Bdel=(int)Math.pow(2, BdelPermi); int Badd=(int)Math.pow(2, BaddPermi); int Bupd=(int)Math.pow(2, BupdaetPermi);*/ //System.out.println("删除b权限取次方后的结果:"+Bdel); //System.out.println("添加b权限取次方后的结果:"+Badd); /** 1000=8=Bdel &11100=28=用户的权限值 ------- 01000=8结果 (1000=1000)8==8用户拥有删除b的权限 */ //System.out.println(Integer.toBinaryString(28)); boolean permission; //能过用户拥有的权限值 &(与) 功能模块的权限值的二进制 运算的结果和 ==功能模块的权限值 做比较判断 //true 用权限 false 为无权限 System.out.println("是否有删除b权限操作权限: "+((purview&Bdel)==Bdel)); System.out.println("是否有添加b权限操作权限: "+((purview&Badd)==Badd)); //判断是否有多个权限 permission=(purview&(Bdel))==(purview&(Badd))?true:false; System.out.println("是否同时有添加b和 删除b 操作:"+permission); permission=(purview&(Bupd))==(purview&(Badd))?true:false; System.out.println("是否同时有修改b和 删除b 操作:"+permission); } /** * 更改用户的权限 * modelID 这里应该到数据库去查询作为条件 这里省略,明白就好 * 这里主要是为了测试,实际应用时应该传入的都是相关对象数据 */ private static int setPermission(int purview, int modelID, int newValue, boolean flag) { // 通移位得到操作权限码 int temp=1<<newValue; if(flag){//增加 //与当前权限进行或操作 purview=purview|temp; }else{//删除 //先取反 再和当前权限进行与操作 temp=~temp; purview=temp&purview; } //返回当前用户拥用的结果根限 return purview; } }
关于<<运算代码
package org.rui.temp; public class GetBin { /** * @param 根据权限值来进行位运算,二进制进多少位 */ public static void main(String[] args) { int val=3; //System.out.println(Integer.toBinaryString(val)); //32位来运算的,前面的0这里省略 System.out.println(1<<0);//01<<0=01=1 System.out.println(1<<1);//01<<1=010=2 System.out.println(1<<2);//01<<2=0100=4 System.out.println(1<<3);//01<<3=01000=8 System.out.println(1<<4);//01<<4=010000=16 System.out.println(1<<5);//一直断续....... System.out.println(1<<6); System.out.println(1<<7); System.out.println(1<<8); System.out.println(1<<9); System.out.println(1<<10); System.out.println(1<<11); } }
相关文章推荐
- eclipse快捷键
- 红黑树(Java)
- 开博了!!
- mvn eclipse:eclipse -Dwtpversion=2.0 -DdownloadSources=true -DdownloadJavadocs=true -DjdkLevel=1.6
- Struts2中的路径问题
- java常见机试题目(1)
- Java面向对象——IO流(字节流读取流)
- struts要解决的问题
- java3D学习(4)Geometry,GeometryArray的介绍以及点线面生成
- java多线程与并发之java并发编程实践
- spring 随笔(一) bean & Dependency Injection
- Eclipse 常用设置
- java InputStream读取数据问题
- Struts2日期控件datatimepicker不能正常显示的问题
- Java Web的笔记
- JAVA 单例模式与多线程
- Java常用排序算法及性能测试集合
- org.springframework.dao.InvalidDataAccessApiUsageException: Write operations are not allowed in read
- java--有关前台展示图片流的用法
- Spring集成Jackson输出非Null数据之XML配置