使用場景:
1:玩家每5/10級可以領取一次獎勵,需要記錄玩家是否已領取
2: 遊戲有10/20/30級vip,每個等級可以領取一次 對應的獎勵
這種情況下,使用 int 類型來儲存比較友善,如果狀态的數量大于30個,可以使用long;
注意:這裡使用的是java語言,Java數字都是有符号的,不能使用32位,使用其他語言 也要注意這個問題;
public static void main(String[] args) {
int num = 0;
int i = setBitTrue(num, 31);
System.out.println(Integer.toBinaryString(i));
System.out.println(getBit(i, 31));
}
/**
* 擷取 一個狀态值value的 第index位
*
* @param value 儲存狀态的int值
* @param index 擷取第幾位
* @return
*/
public static boolean getBit(int value, int index) {
return ((value & (1 << index)) != 0);
}
/**
* 将一個狀态值的 index 位 設定為 1 : true
*
* @param value 儲存狀态的int值
* @param index 設定第幾位為 1
* @return 加工後的值
*/
public static int setBitTrue(int value, int index) {
int mask = 1 << index;
return (value | (mask));
}
/**
* 将一個狀态值的 index 位 設定為 0 : false
*
* @param value 儲存狀态的int值
* @param index 設定第幾位為 0
* @return 加工後的值
*/
public static int setBitFalse(int value, int index) {
int mask = ~(1 << index);
return (value & (mask));
}