基本概念

  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. 安装express

    就目前来说安装express需要走几个步骤,要不就会出现在检查版本的时候就会出现,expres不是内部的命令或者是这种 安装的步骤: 1. 先是输入npm install -g express-gen ...

  2. pta 编程题12 堆中的路径

    其它pta数据结构编程题请参见:pta 这道题考察的是最小堆. 堆是一个完全二叉树,因此可用数组表示,一个下标为 i 的结点的父节点下标为 i / 2,子结点下标为 2i 和 2i + 1. 插入元素 ...

  3. java Vamei快速教程06 组合

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 我们已经尝试去定义类.定义类,就是新建了一种类型(type).有了类,我们接着构造 ...

  4. linux 命令——7 mv(转)

    mv命令是move的缩写,可以用来移动文件或者将文件改名(move (rename) files),是Linux系统下常用的命令,经常用来备份文件或者目录. 1.命令格式: mv [选项] 源文件或目 ...

  5. 2018.5.29 Oracle连接到空闲例程

    解决方法如下: 1.通过cmd命令窗启动Oracle:(最好是以管理员身份启动) C:\Users\Administrator>sqlplus /nolog SQL>conn /as sy ...

  6. 用fast rcnn绘制loss曲线遇到的问题

    运行fast rcnn的train,会进入ipython,要先exit退出才能继续运行程序 绘制图像时,用了命令: ./tools/train_net.py --gpu 0 --solver mode ...

  7. ASP.NET补充

    字典类的子集 using System.Collections.Generic; Dictionary<string, string> dicB = new Dictionary<s ...

  8. 01_15_Struts2_带参数的结果集

    01_15_Struts2_带参数的结果集 1. 背景说明 服务器端页面跳转的时候,通过struts提供的标签的valuestack可以直接取.服务器端的转发,valuestack的对象属性可以共享. ...

  9. jQuery入门第一天-(一个菜鸟的不正经日常)

    jQuery的初步认识 菜鸟Q1:什么是jQuery? jQuery就是一个JavaScript函数库,没什么 特别的. 菜鸟Q2:jQuery能做什么?jQuery是做什么的? jQuery本身就是 ...

  10. 五、Shell 基本运算符

    Shell 基本运算符 Shell 和其他编程语言一样,支持多种运算符,包括: 算数运算符 关系运算符 布尔运算符 字符串运算符 文件测试运算符 原生bash不支持简单的数学运算,但是可以通过其他命令 ...