网上看到一题是这样的 checkbox中有多个值时,为了节约数据空间,我们可以用2^n(n>=0)的值来作为value的值。比如有4个选项A,B,C,D。value分别为1,2,4,8。假如用户选了AC,那么数据库存的就是1+4=5,这样一个5就表示了用户选中的是A,C。取出是用5 分别与上面的1,2,4,8与运算不为0即表示用户选中过。
如5(0101)
A(0001)
--------------
0001-->!=0 表示用户选中A
如5(0101)
B(0010)
--------------
0000-->==0 表示用户没用选中B
其他两项同理。
请问这个用2^n 做解题思路是不是有什么特殊之处呢,两个数相加后的值和这两个数做与运算怎么就这么巧有什么规律定理吗,谢谢
如5(0101)
A(0001)
--------------
0001-->!=0 表示用户选中A
如5(0101)
B(0010)
--------------
0000-->==0 表示用户没用选中B
其他两项同理。
请问这个用2^n 做解题思路是不是有什么特殊之处呢,两个数相加后的值和这两个数做与运算怎么就这么巧有什么规律定理吗,谢谢
当某个 enum 的个数在 64 个以内的时候, 它的 EnumSet 对象实际上就是用了一个 long 来存储的 "bit set"。