位运算:
位运算符包括: 与(&)、非(~)、或(|)、异或(^)
&:当两边操作数的位同时为1时,结果为1,否则为0。如1100&1010=1000
| :当两边操作数的位有一边为1时,结果为1,否则为0。如1100|1010=1110
~:0变1,1变0
^:两边的位不同时,结果为1,否则为0.如1100^1010=0110
它适合用在多状态位的地方,且各状态位有交集;如“报告审阅”需要各级领导全部审阅后才能通过:
贴上例子代码,大家细心研读,就能知其奥秘了:
public class BitwiseOperatorsDemo {
public static final int NONE = 0;
public static final int TEAM_LEADER = 1;
public static final int MANAGER = 2;
public static final int BIG_MANAGER = 4;
public static final int BOSS = 8;
/**
* @param args
*/
public static void main(String[] args) {
//设置初始状态为空
int status = NONE;
//组长阅
status |= TEAM_LEADER;
//经理阅
status |= MANAGER;
//大经理阅
status |= BIG_MANAGER;
//老板阅
status |= BOSS;
if((status & TEAM_LEADER) == TEAM_LEADER) {
System.out.println("status="+status + "; TeamLeader pass" );
}
if((status & MANAGER) == MANAGER) {
System.out.println("status="+status + "; Manager pass" );
}
if((status & BIG_MANAGER) == BIG_MANAGER) {
System.out.println("status="+status + "; BigManager pass" );
}
if((status & BOSS) == BOSS) {
System.out.println("status="+status + "; Boss pass" );
}
//经理撤销审阅
status &= ~MANAGER;
//老板撤销审阅
status &= ~BOSS;
if((status & MANAGER) != MANAGER) {
System.out.println("status="+status + "; Manager no pass" );
}
if((status & BOSS) != BOSS) {
System.out.println("status="+status + "; Boss no pass" );
}
}
}