如何找到数字2 ^ n是2 ^ 1 - 2 ^ m的总和

时间:2015-09-25 18:01:26

标签: algorithm math

假设在某些系统中,用户的状态被分配给权力为2的数字。

 1 - New Member
 2 - Member
 4 - Friend
 8 - VIP
16 - Admin
32 - System Owner

因此,如果System Owner获得FriendAdmin状态,则其状态的值为52.现在,我想查询我的状态表并查看用户拥有的内容{{1 }} 状态。如何检查该号码Friend是数字生成总和(4)的一部分?

如果由函数完成,则在预期输出之后:

52

我想到的算法是减去最大可能数(2 ^ n),该数字低于(在示例中)isPartOf( 4, 52); //returns true isPartOf(12, 52); //returns false since 8 (VIP) was not used during calculating 52 。有更有效的方法吗?

1 个答案:

答案 0 :(得分:4)

按位AND。

>>> 52 & 4 == 4
True
>>> 52 & 12 == 12
False