求2的幂的和
本文关键字: | 更新日期: 2023-09-27 18:11:32
我们有以下产品供用户选择:
- 第1项
- 项3
- 第四项
当用户选择项目并提交时,我们将信息保存为
- 如果item1和item2(2^1, 2^2)被选中,则2+4=6 如果item1和item3(2^ 1,2 ^3),则2+8=10
- 假设,如果用户选择了所有项目,则30.
我想检查用户是否从已经选择的值中选择了item1或item2或item3或item4。如何在c#或ms-sql或javascript中找到这一点?
基本上,将一个数字表示为2的幂的和就是二进制数表示的全部内容。考虑19 = 1 + 2 + 16,所以二进制是10011。如果要检查和是否包含2的特定幂,可以使用按位运算
if(myNum & (1 << i))
将检查第i位是否设置,或者,换句话说,是否包含2的i次方。
在c#中,使用带标志的enum字段:
[Flags] // This Attribute ensures that these items are handled as flags
public enum itemFlags
{
None = 0
item1 = 1,
item2 = 2,
item3 = 4,
item4 = 8
}
重要的是所有值都是2的幂,并且None = 0(如果没有设置标志)。然后,您可以使用ToString-Method来获取已设置的所有标志。
例如,Console.WriteLine(((itemFlags)9).ToString())
应该输出"item1, item4"。
编辑:要找出一个标志是否被选中,你也可以使用HasFlags-Method:
itemFlags myFlags = itemFlags.item1 | itemFlags.item3;
bool isItem1Selected = myFlags.HasFlag(itemFlags.item1);
Console.WriteLine(isItem1Selected.ToString());
这应该打印"True"