体会安卓位运算之美
位运算在实际开发中的使用
在日常生活中,我们可以通过位运算来简化一些操作,例如服务器返回一个数字,可能存在几种状态叠加的情况,如果按照传统的比较麻烦,这时候就需要利用位运算。
服务器返回状态值为:
指令执行正常,指令同步失败,开门指令出错,添加固定密码出错,删除固定密码出错。
那么我们可以用二进制表示。
public class StatusManager {
//返回正常
public static final int STATUS_NORMAL =0; //0000
//时间同步失败
public static final int STATUS_TIME_ASY =1; //0001
//开门指令失败
public static final int STATUS_OPEN_DOOR =1 <<1; //0010
//添加固定密码失败
public static final int STATUS_ADD_FIXED_PSW =1 <<2; //0100
//删除固定密码失败
public static final int STATUS_DEL_FIXED_PSW =1 <<3; //1000
private int flag;
//重置状态
public void setStatus(int status) {
flag = status;
}
//添加一种或者多种状态
public void addStatus(int status) {
flag |= status;
}
//删除一种或者多种状态
public void deleteStatus(int status) {
flag &= ~status;
}
//是否具有某些状态
public boolean hasStatus(int status) {
return (flag & status) == status;
}
//是否不具有某些状态
public boolean hasNotStatus(int status) {
return (flag & status) ==0;
}
//是否不具有某些状态
public boolean hasOnlyStatus(int status) {
return flag == status;
}
}
怎么使用看如下代码
StatusManager statusManager=new StatusManager();
statusManager.addStatus(STATUS_TIME_ASY |STATUS_OPEN_DOOR);
// statusManager.deleteStatus(STATUS_TIME_ASY);
boolean is=statusManager.hasStatus(STATUS_TIME_ASY);
Log.e("tanlin", String.valueOf(is));
这样就OK了