Java的位运算符实例——与(&)、非(~)、或(|)、异或(^)

一、Java的位运算符实例——与(&)、非(~)、或(|)、异或(^)

1、与(&)

0 & 2 = 0

0 0 0
0 1 0
0 1 0

2、非(~)

~0 = 7

0 0 0
1 1 1

3、或(|)

0 & 2 = 2

0 0 0
0 1 0
0 1 0

4、异或(^)

1 & 2 = 3

0 0 1
0 1 0
0 1 1

 二、运用场景。(类似打标)

public enum FlagEnums {

    A(1, "高"), 
    B(2, "富"),
C(3, "帅"),

;
private int bit;

    private String desc;

    FlagEnums(int bit, String desc) {
        this.bit = bit;
        this.desc = desc;
    }
    
    /**
     * 获取当前Flag十进制的值
     * 
     * @return
     */
    public long getBit2Value() {
        BigDecimal posValue = new BigDecimal(2);
        posValue = posValue.pow(bit);
        return posValue.longValue();
    }

    /**
     * 判断Flag中该位有没有打上
     * 
     * @param flag
     * @return
     */
    public boolean  isBitOn(long flag) {
        if ((flag & getBit2Value()) == getBit2Value()) {
            return true;
        }
        return false;
    }
    

    public int getBit() {
        return bit;
    }

    public void setBit(int bit) {
        this.bit = bit;
    }

    public String getDesc() {
        return desc;
    }

    public void setDesc(String desc) {
        this.desc = desc;
    }

}

用户个性标签,我们可以用falg值来表示,个性标签组合决定了falg值。每个标签的 与 操作组合起来就是falg值了

下面对用户分别进行如下三种操作 : 

①、给用户贴上"高"标签 

flag | FlagEnums.A.getValue()

 ②、给用户抹掉"高"标签

flag & (~FlagEnums.A.getValue())

③、判断用户是否有"高"标签

FlagEnums.A.isBitOn(flag);
原文地址:https://www.cnblogs.com/chenmo-xpw/p/5578840.html