基本概念

  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. UVA 12166 Equilibrium Mobile(贪心,反演)

    直接贪心.先想想最后平衡的时候,如果知道了总重量,那么每一个结点的重量其实也就确定了. 每个结点在左在右其实都不影响,只和层数有关.现在反过来,如果不修改某个结点,那么就可以计算出总质量,取总质量出现 ...

  2. vuejs课程简介及框架简介

    vuejs准备知识: 1.前端开发基础 html css js 2.前端模块化基础 3.对es6有初步的了解   vuejs是一种轻量级的MVM框架,他吸收了react和angular的优点,强调re ...

  3. FETCH - 用游标从查询中抓取行

    SYNOPSIS FETCH [ direction { FROM | IN } ] cursorname where direction can be empty or one of: NEXT P ...

  4. Zuul 网关搭建

    本机IP为  192.168.1.102 1.    新建 Maven 项目   zuul 2.   pom.xml <project xmlns="http://maven.apac ...

  5. js call 函数

    function bb(){ console.log(this.x)   } function cc(){ this.x = 200 } var p = new cc(); bb.call(p) // ...

  6. C/C++程序基础 (五)位运算

    C++中四种转换运算符的区分 const_cast 修改const和volatile属性 reinterpret_cast 指针间类型转换或者指针和整形的转换.二进制重新翻译. static_cast ...

  7. 从Mixin到hooks,谈谈对React16.7.0-alpha中即将引入的hooks的理解

      为了实现分离业务逻辑代码,实现组件内部相关业务逻辑的复用,在React的迭代中针对类组件中的代码复用依次发布了Mixin.HOC.Render props等几个方案.此外,针对函数组件,在Reac ...

  8. h5中的video与audio

    ·首先带大家熟悉一下video标签的属性方法,根据属性方法做一个小demo, HTML5支持的视频格式: Ogg 带有Theora视频编码+Ogg文件 支持的浏览器:F.O MEPG4  带有H.26 ...

  9. tcl之关于TCL

  10. 虚拟机中配置SQL SERVER2008R2远程访问

    VM虚拟机中配置数据库访问 选择虚拟机设置--硬件--网络适配器,选择桥接模式:直接连接物理网络 不可选用主机模式(与主机共享专用网络) 数据库远程配置,转自:http://jingyan.baidu ...