一、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);