基本概念

  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 命令——45 free(转)

    free命令可以显示Linux系统中空闲的.已用的物理内存及swap内存,及被内核使用的buffer.在Linux系统监控的工具中,free命令是最经常使用的命令之一. 1.命令格式: free [参 ...

  2. hdu-3549 Flow Problem---最大流模板题(dinic算法模板)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3549 题目大意: 给有向图,求1-n的最大流 解题思路: 直接套模板,注意有重边 传送门:网络流入门 ...

  3. NOIP2018初赛 解题报告

    前言 \(NOIP2018\)初赛已经结束了,接下来就要准备复赛了. 不过,在此之前,还是先为初赛写一篇解题报告吧. 单项选择题 送分题.(虽然我还是做错了)可以考虑将它们全部转化为\(10\)进制, ...

  4. 感谢我的python老师

    Python自动化开发(金角大王版) http://www.cnblogs.com/alex3714/articles/5885096.html

  5. Ribbon 负载均衡搭建

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

  6. HH的项链题解(离线思想+链表+树状数组)

    本人第一篇博客重磅推出!!! 希望各位朋友以后多多捧场也多给写意见(我个人喜欢把题解写得啰嗦一点,因为这样方便理解,各位巨佬勿喷) 来讲一道提高+/省选-的骚题:HH的项链(这个HH你理解成皇后呵呵哈 ...

  7. 网络流_Edmond-Karp算法、Dinic算法

    转载:网络流基础篇——Edmond-Karp算法             BY纳米黑客 网络流的相关定义: 源点:有n个点,有m条有向边,有一个点很特殊,只出不进,叫做源点. 汇点:另一个点也很特殊, ...

  8. LIS最长上升子序列模板

    LIS n2解法: #include<iostream> #include<cstdio> using namespace std; int n,ans; ],f[]; int ...

  9. JavaScript ES6功能概述(ECMAScript 6和ES2015 +)

    JavaScript在过去几年中发生了很大的变化.这些是您今天可以开始使用的12项新功能! 该语言的新增内容称为ECMAScript 6.它也称为ES6或ES2015 +. 自1995年JavaScr ...

  10. jquery/js/a标签实现当前页面跳转的两种方法

    在逛购物网站首页时经常看到侧边导航栏,当我们点击导航栏中某一项时会跳转到当前页面的某一处 有两种方法实现,一种是利用js计算好各位置的高度,通过绑定事件使页面跳转到指定位置,另一种是利用a标签进行当前 ...