基本概念

  1. package test;
  2. publicclass Rights {
  3. publicstaticvoid main(String[] args) {
  4. int a=1; // 001 状态a
  5. int b=2; // 010 状态b
  6. int c=4; // 100 状态c
  7. int ab = a | b; // 001 | 010 = 011 初始状态
  8. System.out.println(ab | c); // 011 | 100 = 111 添加c的状态
  9. System.out.println(ab & (~b)); // 011 & (~010) = 011 & 101 = 001 去除b的状态
  10. System.out.println((ab & b) == b); // 011 & 010 = 010 判断是否有b的权限:(ab & b)==b
  11. System.out.println((ab & c) == c); // 011 & 100 = 000
  12. }
  13. }
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
}
}

使用二进制进行权限或状态控制

  1. package test;
  2. publicclass Test {
  3. /**
  4. * @param args
  5. */
  6. publicstaticvoid main(String[] args) {
  7. /**
  8. * 四种权限 ,当前定义为int,以下二进制表示只取后四位作说明
  9. */
  10. // 添加
  11. int c = 1;// ...0001=2^0
  12. // 查询
  13. int r = 2;// ...0010=2^1
  14. // 修改
  15. int u = 4;// ...0100=2^3
  16. // 删除
  17. int d = 8;// ...1000=2^4
  18. /**
  19. *
  20. * 大家可以观察四种权限的二进制表示的规律 ,都是2的N次方,
  21. * 就表示本身,添加权限有最后一位为其它为0,查询倒数第二位为1其它都为0,修改倒数第三个为1其它都为0,删除倒数第四个为1其它都为0
  22. *
  23. */
  24. /**
  25. * 这样表示有哪种权限时可以用 |(按位或) 操作
  26. *
  27. */
  28. // 用户A有添加和修改权限
  29. int usera = c | r | u;
  30. // 用户B有添加和删除权限
  31. int userb = c | d;
  32. /**
  33. * 判断用户是否有某种权限用用户权限和要判断的权限进行 &(按位与) 操作,结果为要判断的权限值时表示用户有此权限,否则没有此权限
  34. */
  35. System.out.println();
  36. if ((usera & u) == u) {
  37. System.out.println("用户a有更新权限");
  38. } else {
  39. System.out.println("用户a没有有更新权限");
  40. }
  41. /**
  42. * 给用户添加权限用用户权限和要添加的权限|(按位或) 操作再覆盖之前权限值
  43. */
  44. System.out.println();
  45. if ((userb & u) == u) {
  46. System.out.println("用户b有更新权限");
  47. } else {
  48. System.out.println("用户b没有更新权限");
  49. }
  50. System.out.println("==>给用户b添加更新权限");
  51. userb = userb | u;
  52. if ((userb & u) == u) {
  53. System.out.println("用户b有更新权限");
  54. } else {
  55. System.out.println("用户b没有更新权限");
  56. }
  57. /**
  58. * 取消用户某种权限,用用户权限和要取消的权限按位取反后进行按位 操作,再覆盖之前权限值
  59. */
  60. System.out.println();
  61. if ((usera & r) == r) {
  62. System.out.println("用户a有查询权限");
  63. } else {
  64. System.out.println("用户a没有查询权限");
  65. }
  66. System.out.println("==>取消用户a的查询权限");
  67. usera = usera & (~r);
  68. if ((usera & r) == r) {
  69. System.out.println("用户a有查询权限");
  70. } else {
  71. System.out.println("用户a没有查询权限");
  72. }
  73. }
  74. }
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没有查询权限");
}
} }

二进制和十进制之间的转换

  1. package test;
  2. publicclass Trans {
  3. publicstaticvoid main(String[] args) {
  4. int bit = 7;
  5. System.out.println(Integer.toBinaryString(bit)); // 十进制转二进制
  6. Integer it = Integer.valueOf("111", 2);
  7. System.out.println(it);// 转换为10进制结果
  8. }
  9. }

java中使用二进制进行权限控制的更多相关文章

  1. Java面试题03-访问权限控制

    Java面试题03-访问权限控制 1. Java中的包主要是为了防止类文件命名冲突以及方便进行代码组织和管理,因此采用域名倒置的方式来进行命名: 2. Java解释器的运行过程:首先找到环境变量CLA ...

  2. Java之封装与访问权限控制(二)

    目录 Java之封装与访问权限控制(二) 包:库单元 import import static Java常用包 Java之封装与访问权限控制(二) 访问权限控制是具体实现的隐藏,是封装性的一部分体现. ...

  3. Java之封装与访问权限控制(一)

    目录 Java之封装与访问权限控制(一) 封装的概念 访问控制符 属性私有化 Java之封装与访问权限控制(一) 对于封装的概念,我总觉得自己还是挺了解的,但是真要我说,还真说不出个啥来.我只能默默地 ...

  4. JAVA基础学习之throws和throw的区别、Java中的四种权限、多线程的使用等(2)

    1.throws和throw的区别 throws使用在函数外,是编译时的异常,throw使用在函数内,是运行时的异常 使用方法 public int method(int[] arr) throws ...

  5. Java中的二进制及基本的位运算

    Java中的二进制及基本的位运算 二进制是计算技术中广泛采用的一种数制.二进制数据是用0和1两个数码来表示的数.它的基数为2,进位规则是"逢二进一",借位规则是"借一当二 ...

  6. Java 中的运算符和流程控制

    Java 中的运算符和流程控制 + 面试题 算术运算符 Java 中的算术运算符,包括以下几种: **算术运算符** **名称** **举例** + 加法 1+2=3 - 减法 2-1=1 \* 乘法 ...

  7. Java继承多态中的方法访问权限控制

    java中的方法天生具有继承多态特性,这点与C++有很大不同(需要在父类方发上加virtual关键字),但用起来确实方便了许多. 最简单的继承多态 声明一个接口BaseIF,只包含一个方法声明 pub ...

  8. Solidity合约记录——(三)如何在合约中对操作进行权限控制

    合约中一般会有多种针对不同数据的操作:例如对于存证内容的增加.更新及查询,若不进行一套符合要求的权限控制,事实上整个合约在真实环境下是没有多少使用价值的.那么应当如何对合约的权限进行划分?我们针对So ...

  9. Java编程思想之六访问权限控制

    访问控制(或隐藏具体实现)与"最初的实现并不恰当"有关. 访问权限控制的等级,从最大权限到最小权限依次为:public,protected,包访问权限(没有关键字)和private ...

随机推荐

  1. Redis基础对象

    Redis 中每个对象都由一个 redisObject 结构表示 typedef struct redisObject { //类型 unsigned type:; //编码 unsigned enc ...

  2. constraint的一些用法总结

    主要就是增加约束的 以下几种约束 .并 一一列举: 1.主键约束: 要对一个列加主键约束的话,这列就必须要满足的条件就是分空 因为主键约束:就是对一个列进行了约束,约束为(非空.不重复) 以下是代码  ...

  3. 【luogu P1637 三元上升子序列】 题解

    题目链接:https://www.luogu.org/problemnew/show/P1637 BIT + 离散化. 读题得数据规模需离散化.BIT开不到longint这么大的数组. 对于题目所求的 ...

  4. java设计模式——抽象工程模式

    一. 定义与类型 定义:抽象工厂模式提供一个创建一系列相关或相互依赖对象的接口,无须指定他们具体的类 类型:创建型 二. 适用场景 客户端不依赖于产品类实例如何备创建,实现等细节 创建一系列相关的产品 ...

  5. Python基础-Python注释

    一.什么是注释.特性 1.一段文字性的描述,通过注释,可以解释和明确Python代码的功能,并记录将来要修改的地方. 2.当程序处理时,Python解释器会自动忽略,不会被当做代码进行处理 二.注释的 ...

  6. (79)zabbix key总是not supported的解决方法

    zabbix定义好key之后,总是会出现Not supported,看到这个问题,大家不用着急,问题其实很容易解决,首先鼠标点击当前key的大红叉上,会显示出报错内容. 常见的有: 1. zabbix ...

  7. bootstrap-图片样式记录

    //三种形状<img src=”img/pic.png” alt=”图片” class=”img-rounded” /><img src=”img/pic.png” alt=”图片” ...

  8. java+Mysql大数据的一些优化技巧

    众所周知,java在处理数据量比较大的时候,加载到内存必然会导致内存溢出,而在一些数据处理中我们不得不去处理海量数据,在做数据处理中,我们常见的手段是分解,压缩,并行,临时文件等方法; 例如,我们要将 ...

  9. Python入门必学:字符串和编码正确的使用方法

    字符编码,我们已经讲过了,字符串也是一种数据类型,但是,字符串比较特殊的是还有一个编码问题. 因为计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理.最早的计算机在设计时采用8个比特 ...

  10. HDU_6194 后缀数组+RMQ

    好绝望的..想了五个多小时,最后还是没A...赛后看了下后缀数组瞬间就有了思路...不过因为太菜,想了将近两个小时才吧这个题干掉. 首先,应当认为,后缀数组的定义是,某字符串S的所有后缀按照字典序有小 ...