位運(yùn)算在實(shí)際開(kāi)發(fā)中的使用
在日常生活中怎爵,我們可以通過(guò)位運(yùn)算來(lái)簡(jiǎn)化一些操作特石,例如服務(wù)器返回一個(gè)數(shù)字,可能存在幾種狀態(tài)疊加的情況鳖链,如果按照傳統(tǒng)的比較麻煩姆蘸,這時(shí)候就需要利用位運(yùn)算。
服務(wù)器返回狀態(tài)值為:
指令執(zhí)行正常芙委,指令同步失敗逞敷,開(kāi)門指令出錯(cuò),添加固定密碼出錯(cuò)灌侣,刪除固定密碼出錯(cuò)推捐。
那么我們可以用二進(jìn)制表示。
public class StatusManager {
//返回正常
? ? public static final int STATUS_NORMAL =0; //0000
//時(shí)間同步失敗
? ? public static final int STATUS_TIME_ASY =1; //0001
//開(kāi)門指令失敗
? ? 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;
? ? //重置狀態(tài)
? ? public void setStatus(int status) {
flag = status;
? ? }
//添加一種或者多種狀態(tài)
? ? public void addStatus(int status) {
flag |= status;
? ? }
//刪除一種或者多種狀態(tài)
? ? public void deleteStatus(int status) {
flag &= ~status;
? ? }
//是否具有某些狀態(tài)
? ? public boolean hasStatus(int status) {
return (flag & status) == status;
? ? }
//是否不具有某些狀態(tài)
? ? public boolean hasNotStatus(int status) {
return (flag & status) ==0;
? ? }
//是否不具有某些狀態(tài)
? ? 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了