天天看點

一個int儲存多種狀态資訊

使用場景:

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));
    }
           

繼續閱讀