java &|~<< 位运算设计权限代码!查询权限、增加权限、删除权限

来源:互联网 发布:淘宝店铺降权有通知吗 编辑:程序博客网 时间:2024/05/21 11:23

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=3static int BaddPermi=5;//添加B=5static int BupdaetPermi=5;//修改B==4public 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=1System.out.println(1<<1);//01<<1=010=2System.out.println(1<<2);//01<<2=0100=4System.out.println(1<<3);//01<<3=01000=8System.out.println(1<<4);//01<<4=010000=16System.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);}}



3 0
原创粉丝点击