基本概念

  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. linux 命令——30 chown (转)

    chown将指定文件的拥有者改为指定的用户或组,用户可以是用户名或者用户ID:组可以是组名或者组ID:文件是以空格分开的要改变权限的文件列表,支持通配符.系统管理员经常使用chown命令,在将文件拷贝 ...

  2. 为当前导航添加active样式

    判断当前页面为哪个导航链接 if(window.loacation.href.indexOf(linkurl) != -1){ link[i].className = 'active' }

  3. Q9400为何难以100%全速运行

    采用基于正域的约简. 数据:Ticdata2000 记录数:5822 条件属性:85 结果: 1. Core i7 3632QM 4四核八线程 2.2G 动态加速3.2G 0.516s 2. Core ...

  4. iOS 常用正则表达式

    今天看到一个正则表达式的文章,总结的挺好的,就自己转载一下,我还会陆续加入一些我自己看到常用的正则表达式 (原地址:http://www.code4app.com/blog-721976-112.ht ...

  5. 快速下载jar包

    1, http://www.mvnrepository.com 2,可以从spring官网上下载,如果是mvn的话可以通过上面的网址下载

  6. 使用Servlet根据浏览器request的get方法获取值,将磁盘中与之对应的json数据删除的方法

    package com.swift; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStrea ...

  7. java面向对象思想1

    1.面向对象是面向过程而言.两者都是一种思想.面向过程:强调的是功能行为.(强调过程.动作)面向对象:将功能封装进对象,强调了具备了功能的对象.(强调对象.事物)面向对象是基于面向过程的.将复杂的事情 ...

  8. linux运维、架构之路-MySQL多实例

    一.MySQL多实例介绍            一台服务器上开启多个不同的服务端口(3306,3307,3308),运行多个MySQL服务进程,共用一套MySQL安装程序,多实例MySQL在逻辑上看是 ...

  9. 制定RPM包和加入YUM源

    ##################################################### ##如有转载,请务必保留本文链接及版权信息 ##欢迎广大运维同仁一起交流linux/unix ...

  10. PHP如何严格控制session过期时间

    第一种回答 那么, 最常见的一种回答是: 设置Session的过期时间, 也就是session.gc_maxlifetime, 这种回答是不正确的, 原因如下: 1. 首先, 这个PHP是用一定的概率 ...