使用场景: 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)); }