Javascript 在二的幂和中求一个数

Javascript 在二的幂和中求一个数,javascript,c#,sql-server,Javascript,C#,Sql Server,我们有以下项目供用户选择: 项目1 项目2 项目3 项目4 当用户选择项目并提交时,我们保存信息,如 如果选择了item1和item2 2^1、2^2,则2+4=6 如果项目1和项目3 2^1,2^3,则2+8=10 假设,如果用户选择了所有项目,则为30。 我想检查用户是否从已经选择的值中选择了item1、item2、item3或item4。 如何在c、ms sql或javascript中找到这一点?基本上,将一个数字表示为二的幂和就是二进制数表示的全部内容。考虑19=1+2+16,所以二进制

我们有以下项目供用户选择:

项目1 项目2 项目3 项目4 当用户选择项目并提交时,我们保存信息,如

如果选择了item1和item2 2^1、2^2,则2+4=6 如果项目1和项目3 2^1,2^3,则2+8=10 假设,如果用户选择了所有项目,则为30。 我想检查用户是否从已经选择的值中选择了item1、item2、item3或item4。
如何在c、ms sql或javascript中找到这一点?

基本上,将一个数字表示为二的幂和就是二进制数表示的全部内容。考虑19=1+2+16,所以二进制是10011。如果要检查总和是否包含2的特定幂,可以使用


ifmyNum&1基本上,将一个数表示为二的幂和就是二进制数表示的全部内容。考虑19=1+2+16,所以二进制是10011。如果要检查总和是否包含2的特定幂,可以使用


在C中,使用带有如下标志的枚举字段:

[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方法获取设置的所有标志

比如说,

Console.WriteLine(((itemFlags)9).ToString())
应该输出第1项、第4项

编辑:

要确定是否选择了某个标志,还可以使用HasFlags方法:

itemFlags myFlags = itemFlags.item1 | itemFlags.item3;
bool isItem1Selected = myFlags.HasFlag(itemFlags.item1);
Console.WriteLine(isItem1Selected.ToString());

这应该是真的。

在C中,使用带有如下标志的枚举字段:

[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方法获取设置的所有标志

比如说,

Console.WriteLine(((itemFlags)9).ToString())
应该输出第1项、第4项

编辑:

要确定是否选择了某个标志,还可以使用HasFlags方法:

itemFlags myFlags = itemFlags.item1 | itemFlags.item3;
bool isItem1Selected = myFlags.HasFlag(itemFlags.item1);
Console.WriteLine(isItem1Selected.ToString());


这应该是真的。

考虑一下二进制形式的数字。设置为1的每个数字都是一个选定项。设置为0的每个数字都是一个未选中的项目。因此,基本上,您只知道最终的总和,并且您想知道用户选择了哪些项目。假设sum=12,那么您的结果将是选择了item2和item3。我说得对吗?更正:你说如果用户选择了所有项目,那么应该是30,但如果用户选择了所有项目,那么应该是15-因为最低顺序的项目应该由2^0表示,而不是2^1,考虑到它的二进制形式的数字。设置为1的每个数字都是一个选定项。设置为0的每个数字都是一个未选中的项目。因此,基本上,您只知道最终的总和,并且您想知道用户选择了哪些项目。假设sum=12,那么您的结果将是选择了item2和item3。我说得对吗?更正:你说如果用户选择了所有项目,那么应该是30,但如果用户选择了所有项目,那么应该是15-因为最低顺序的项目应该由2^0表示,而不是2^1。对于JavaScript按位运算符引用,请参阅。谢谢。但我不明白为什么要检查钻头。如果用户选择了项1和项2,则结果为6。对于6,二进制是0110,对于2,二进制是10。如何检查6中是否存在2。检查第二位。只需执行0110和0010并检查这是否为零。这基本上就是ifmyNum&1,你取00…001,它是1,然后向左移动2位,得到00…00100,它是1,对不起,我不能理解这个计算。您能提供一些参考吗?有关JavaScript按位运算符的参考,请参阅。谢谢。但我不明白为什么要检查钻头。如果用户选择了项1和项2,则结果为6。对于6,二进制是0110,对于2,二进制是10。如何检查6中是否存在2。检查第二位。只需执行0110和0010并检查这是否为零。这基本上就是ifmyNum&1,你取00…001,它是1,然后向左移动2位,得到00…00100,它是1,对不起,我不能理解这个计算。你能提供一些参考吗?OP想要组合这些值,所以你应该提供示例代码,演示如何使用|我的理解是OP想要从已经选择的组合(如10)中找出设置了哪些标志?OP现在已经澄清了这个问题,所以这个答案看起来不错。OP想要组合这些值,所以你应该提供示例代码,演示如何使用|我的理解是OP想要从已经选择的组合(如10)中找出设置了哪些标志?OP现在已经澄清了这个问题,所以这个答案看起来不错。