java中使用二进制进行权限控制
基本概念
- package test;
- publicclass Rights {
- publicstaticvoid main(String[] args) {
- int a=1; // 001 状态a
- int b=2; // 010 状态b
- int c=4; // 100 状态c
- int ab = a | b; // 001 | 010 = 011 初始状态
- System.out.println(ab | c); // 011 | 100 = 111 添加c的状态
- System.out.println(ab & (~b)); // 011 & (~010) = 011 & 101 = 001 去除b的状态
- System.out.println((ab & b) == b); // 011 & 010 = 010 判断是否有b的权限:(ab & b)==b
- System.out.println((ab & c) == c); // 011 & 100 = 000
- }
- }
package test;
public class Rights {
public static void main(String[] args) {
int a=1; // 001 状态a
int b=2; // 010 状态b
int c=4; // 100 状态c
int ab = a | b; // 001 | 010 = 011 初始状态
System.out.println(ab | c); // 011 | 100 = 111 添加c的状态
System.out.println(ab & (~b)); // 011 & (~010) = 011 & 101 = 001 去除b的状态
System.out.println((ab & b) == b); // 011 & 010 = 010 判断是否有b的权限:(ab & b)==b
System.out.println((ab & c) == c); // 011 & 100 = 000
}
}
使用二进制进行权限或状态控制
- package test;
- publicclass Test {
- /**
- * @param args
- */
- publicstaticvoid main(String[] args) {
- /**
- * 四种权限 ,当前定义为int,以下二进制表示只取后四位作说明
- */
- // 添加
- int c = 1;// ...0001=2^0
- // 查询
- int r = 2;// ...0010=2^1
- // 修改
- int u = 4;// ...0100=2^3
- // 删除
- int d = 8;// ...1000=2^4
- /**
- *
- * 大家可以观察四种权限的二进制表示的规律 ,都是2的N次方,
- * 就表示本身,添加权限有最后一位为其它为0,查询倒数第二位为1其它都为0,修改倒数第三个为1其它都为0,删除倒数第四个为1其它都为0
- *
- */
- /**
- * 这样表示有哪种权限时可以用 |(按位或) 操作
- *
- */
- // 用户A有添加和修改权限
- int usera = c | r | u;
- // 用户B有添加和删除权限
- int userb = c | d;
- /**
- * 判断用户是否有某种权限用用户权限和要判断的权限进行 &(按位与) 操作,结果为要判断的权限值时表示用户有此权限,否则没有此权限
- */
- System.out.println();
- if ((usera & u) == u) {
- System.out.println("用户a有更新权限");
- } else {
- System.out.println("用户a没有有更新权限");
- }
- /**
- * 给用户添加权限用用户权限和要添加的权限|(按位或) 操作再覆盖之前权限值
- */
- System.out.println();
- if ((userb & u) == u) {
- System.out.println("用户b有更新权限");
- } else {
- System.out.println("用户b没有更新权限");
- }
- System.out.println("==>给用户b添加更新权限");
- userb = userb | u;
- if ((userb & u) == u) {
- System.out.println("用户b有更新权限");
- } else {
- System.out.println("用户b没有更新权限");
- }
- /**
- * 取消用户某种权限,用用户权限和要取消的权限按位取反后进行按位 操作,再覆盖之前权限值
- */
- System.out.println();
- if ((usera & r) == r) {
- System.out.println("用户a有查询权限");
- } else {
- System.out.println("用户a没有查询权限");
- }
- System.out.println("==>取消用户a的查询权限");
- usera = usera & (~r);
- if ((usera & r) == r) {
- System.out.println("用户a有查询权限");
- } else {
- System.out.println("用户a没有查询权限");
- }
- }
- }
package test;
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
/**
* 四种权限 ,当前定义为int,以下二进制表示只取后四位作说明
*/
// 添加
int c = 1;// ...0001=2^0
// 查询
int r = 2;// ...0010=2^1
// 修改
int u = 4;// ...0100=2^3
// 删除
int d = 8;// ...1000=2^4
/**
*
* 大家可以观察四种权限的二进制表示的规律 ,都是2的N次方,
* 就表示本身,添加权限有最后一位为其它为0,查询倒数第二位为1其它都为0,修改倒数第三个为1其它都为0,删除倒数第四个为1其它都为0
*
*/
/**
* 这样表示有哪种权限时可以用 |(按位或) 操作
*
*/
// 用户A有添加和修改权限
int usera = c | r | u;
// 用户B有添加和删除权限
int userb = c | d;
/**
* 判断用户是否有某种权限用用户权限和要判断的权限进行 &(按位与) 操作,结果为要判断的权限值时表示用户有此权限,否则没有此权限
*/
System.out.println();
if ((usera & u) == u) {
System.out.println("用户a有更新权限");
} else {
System.out.println("用户a没有有更新权限");
}
/**
* 给用户添加权限用用户权限和要添加的权限|(按位或) 操作再覆盖之前权限值
*/
System.out.println();
if ((userb & u) == u) {
System.out.println("用户b有更新权限");
} else {
System.out.println("用户b没有更新权限");
}
System.out.println("==>给用户b添加更新权限");
userb = userb | u;
if ((userb & u) == u) {
System.out.println("用户b有更新权限");
} else {
System.out.println("用户b没有更新权限");
}
/**
* 取消用户某种权限,用用户权限和要取消的权限按位取反后进行按位 操作,再覆盖之前权限值
*/
System.out.println();
if ((usera & r) == r) {
System.out.println("用户a有查询权限");
} else {
System.out.println("用户a没有查询权限");
}
System.out.println("==>取消用户a的查询权限");
usera = usera & (~r);
if ((usera & r) == r) {
System.out.println("用户a有查询权限");
} else {
System.out.println("用户a没有查询权限");
}
}
}
二进制和十进制之间的转换
- package test;
- publicclass Trans {
- publicstaticvoid main(String[] args) {
- int bit = 7;
- System.out.println(Integer.toBinaryString(bit)); // 十进制转二进制
- Integer it = Integer.valueOf("111", 2);
- System.out.println(it);// 转换为10进制结果
- }
- }
java中使用二进制进行权限控制的更多相关文章
- Java面试题03-访问权限控制
Java面试题03-访问权限控制 1. Java中的包主要是为了防止类文件命名冲突以及方便进行代码组织和管理,因此采用域名倒置的方式来进行命名: 2. Java解释器的运行过程:首先找到环境变量CLA ...
- Java之封装与访问权限控制(二)
目录 Java之封装与访问权限控制(二) 包:库单元 import import static Java常用包 Java之封装与访问权限控制(二) 访问权限控制是具体实现的隐藏,是封装性的一部分体现. ...
- Java之封装与访问权限控制(一)
目录 Java之封装与访问权限控制(一) 封装的概念 访问控制符 属性私有化 Java之封装与访问权限控制(一) 对于封装的概念,我总觉得自己还是挺了解的,但是真要我说,还真说不出个啥来.我只能默默地 ...
- JAVA基础学习之throws和throw的区别、Java中的四种权限、多线程的使用等(2)
1.throws和throw的区别 throws使用在函数外,是编译时的异常,throw使用在函数内,是运行时的异常 使用方法 public int method(int[] arr) throws ...
- Java中的二进制及基本的位运算
Java中的二进制及基本的位运算 二进制是计算技术中广泛采用的一种数制.二进制数据是用0和1两个数码来表示的数.它的基数为2,进位规则是"逢二进一",借位规则是"借一当二 ...
- Java 中的运算符和流程控制
Java 中的运算符和流程控制 + 面试题 算术运算符 Java 中的算术运算符,包括以下几种: **算术运算符** **名称** **举例** + 加法 1+2=3 - 减法 2-1=1 \* 乘法 ...
- Java继承多态中的方法访问权限控制
java中的方法天生具有继承多态特性,这点与C++有很大不同(需要在父类方发上加virtual关键字),但用起来确实方便了许多. 最简单的继承多态 声明一个接口BaseIF,只包含一个方法声明 pub ...
- Solidity合约记录——(三)如何在合约中对操作进行权限控制
合约中一般会有多种针对不同数据的操作:例如对于存证内容的增加.更新及查询,若不进行一套符合要求的权限控制,事实上整个合约在真实环境下是没有多少使用价值的.那么应当如何对合约的权限进行划分?我们针对So ...
- Java编程思想之六访问权限控制
访问控制(或隐藏具体实现)与"最初的实现并不恰当"有关. 访问权限控制的等级,从最大权限到最小权限依次为:public,protected,包访问权限(没有关键字)和private ...
随机推荐
- shp格式数据发布服务:postGIS + postgresql + geoserver
主要流程: ①使用postgresql创建数据库 ②下载安装postgis插件 ③在创建的数据库中使用postgis插件,执行下列语句 CREATE EXTENSION postgis; CREATE ...
- 理解MVC 框架
前言:很多前端开发者面临着这样的问题,在项目开发中承担的工作越来越多,后端要做的越来越少,需要的技术棧越来越多,经常有人问你个技术是你完全不会的,对自己的职业生涯越来越怀疑.从前认为HTML+CSS+ ...
- 3203 数组做函数参数----排序函数--C语言版
3203: 数组做函数参数----排序函数--C语言版 时间限制: 1 Sec 内存限制: 128 MB提交: 253 解决: 151[提交][状态][讨论版][命题人:smallgyy] 题目描 ...
- php xdebug扩展无法进入断点问题
Waiting for incoming connection with ide key 看到这句话就恶心 这两天搞php运行环境搞的头大,好在现在终于调通了,可以正常进入断点了 现在记录一下,避免下 ...
- python_33_文件操作2
f=open('yesterday',encoding='utf-8') #print(f.readline())#读一行,并且是第一行 #读前5行 for i in range(5):#range( ...
- HP刀片服务器安装系统步骤
原文链接 HP刀片服务器安装系统步骤: HP刀片使用一个叫OA(Onboard Administrator)的管理平台统一进行管理,具有很高的集成性,同时使用起来也很简单方便,通过IE浏览器输入IP地 ...
- 数组 -----JavaScript
本文摘要:http://www.liaoxuefeng.com/ JavaScript的Array可以包含任意数据类型,并通过索引来访问每个元素.(数据里面可以有多个不同类型的元素组成) 要取得Arr ...
- 前端小记2——移动web解决方案
面向用户级移动web解决方案: 1.代码结构规范 2.字体设置 body{ font-family: -apple-system, BlinkMacSystemFont, "PingFang ...
- Oracle下如何收集 Systemstate dump
2: dump (不包括lock element) 10: dump 11: dump + global cache of RAC 256: short stack (函数堆栈) 258: 256+2 ...
- oc数组遍历
#import <Foundation/Foundation.h> //数组遍历(枚举)对集合中的元素依此不重复的进行遍历 int main(int argc, const char * ...