其实一说到java运算,对于接触过java软件开发的朋友们来说应该可以很轻易的想到许许多多的运算方式,那么对小编今天带来的位运算也不会感到陌生吧,下面还是一起来看看java中的位运算是如何定义的吧,有什么作用呢?
位运算基础定义如下:
位运算是针对整数的二进制进行的位移操作;
整数呢32位, 正数符号为0,负数符号为1。十进制转二进制 不足32位的,最高位补符号位,其余补零;
在java中,整数的二进制是以补码的形式存在的;
位运算计算完,还是补码的形式,要转成原码,再得出十进制值;
正数:原码=反码=补码,负数:反码=原码忽略符号位取反, 补码=反码+1;
例如:十进制4 转二进制在计算机中表示为(补码) 00000000 00000000 00000000 00000100
例如:十进制-4 转二进制在计算机中表示为(补码) 11111111 11111111 11111111 11111100
位运算应用。在一个系统中,用户一般有查询(Select)、新增(Insert)、修改(Update)、删除(Delete)
这四种权限,四种权限有多种组合方式,也就是有16中不同的权限状态(2的4次方)。
一般情况下会想到用四个boolean类型变量来保存:
public class Permission { // 是否允许查询 private boolean allowSelect; // 是否允许新增 private boolean allowInsert; // 是否允许删除 private boolean allowDelete; // 是否允许更新 private boolean allowUpdate; // 省略Getter和Setter }
上面就用了四个boolean类型变量来保存每种权限状态。
下面呢是另外一种方式,使用位掩码的话,用一个二进制数就可以了,每一位来表示一种权限,0表示无权限,1表示有权限。
public class NewPermission { // 是否允许查询,二进制第1位,0表示否,1表示是 public static final int ALLOW_SELECT = 1 << 0; // 0001 // 是否允许新增,二进制第2位,0表示否,1表示是 public static final int ALLOW_INSERT = 1 << 1; // 0010 // 是否允许修改,二进制第3位,0表示否,1表示是 public static final int ALLOW_UPDATE = 1 << 2; // 0100 // 是否允许删除,二进制第4位,0表示否,1表示是 public static final int ALLOW_DELETE = 1 << 3; // 1000 // 存储目前的权限状态 private int flag; /** * 重新设置权限 */ public void setPermission(int permission) { flag = permission; } /** * 添加一项或多项权限 */ public void enable(int permission) { flag |= permission; } /** * 删除一项或多项权限 */ public void disable(int permission) { flag &= ~permission; } /** * 是否拥某些权限 */ public boolean isAllow(int permission) { return (flag & permission) == permission; } /** * 是否禁用了某些权限 */ public boolean isNotAllow(int permission) { return (flag & permission) == 0; } /** * 是否仅仅拥有某些权限 */ public boolean isOnlyAllow(int permission) { return flag == permission; } }
以上代码中,用四个常量表示了每个二进制位代码的权限项。
那么以上就是本篇文章的所有内容了,如果你还想了解更多java入门知识,就赶快来关注本站消息吧。