找到两个幂之和的数字

时间:2016-10-05 11:59:02

标签: javascript c# sql-server

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

  1. 第1项
  2. 第2项
  3. 第3项
  4. 第4项
  5. 当用户选择项目并提交时,我们会保存

    等信息
    • 如果选择了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中找到它?

3 个答案:

答案 0 :(得分:1)

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

if(myNum & (1 << i))将检查第i位是否设置,换句话说,是否包含2的幂的总和。

答案 1 :(得分:-1)

在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-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”。

答案 2 :(得分:-2)

done it in js . can you try it ? 


<pre>
var number=30; 
while(number > 0) { 
if(number>=16) { number=number-16; alert("Item4"); } 
else if(number>=8) { number=number-8; alert("Item3"); } 
else if(number>=4) { number=number-4; alert("Item2"); } 
else if(number>=2) { number=number-2; alert("Item1"); } 
else { number=-1; } }
</pre>