我们经常会用到使用一个32位或64位的数来存储只有两种状态的列表,(列表长度=< 64)。
比如使用2,二进制表示为10,来表示一个第一位为0,第二位为1的列表。
再如使用6,二进制表示为110,第一位为0,第二位1,第三位1的列表。
最终我们存储的时候,只需要存储一个32/64位的数在数据库中,就可以完成这个列表状态的存储了。
当我们决定使用这种实现的时候,就需要频繁经常使用到下面两个接口,
get_pos_state(Pos, Num) -> 得出Num的Pos位的状态,返回0或1
set_pos_state(Pos, State, Num) -> 设置 Num第Pos位的状态为State(State只能为0或1),并返回新的NumNew
下面代码使用erlang的位运算符,提供这两种接口的实现。
band 按位与运算
bsl 左移运算
bor 按位或运算