java位运算是如何定义的?有什么作用?

XIAO 2020-04-25 21:19:36 java常见问答 6369

其实一说到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入门知识,就赶快来关注本站消息吧。