求2的幂的和

本文关键字: | 更新日期: 2023-09-27 18:11:32

我们有以下产品供用户选择:

  1. 第1项
  2. 项3
  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的幂的和

基本上,将一个数字表示为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"

相关文章:
  • 没有找到相关文章