相关疑难解决方法(0)

如何计算32位整数中的设置位数?

代表数字7的8位看起来像这样:

00000111
Run Code Online (Sandbox Code Playgroud)

设置三位.

什么算法来确定32位整数中的设置位数?

algorithm binary bit-manipulation hammingweight iec10967

838
推荐指数
31
解决办法
52万
查看次数

测试单个值的[Flags]枚举值

如果我有一个enum标记的[Flags],有没有办法在.NET中测试这种类型的值,看它是否只包含一个值?我可以使用位计数得到我想要的结果,但如果可能的话我宁愿使用内置函数.

enum动态循环遍历值时,Enum.GetValues()也会返回组合标志.enum在以下示例中调用该函数将返回4个值.但是,我不希望内部算法中包含值组合.测试单个enum值的相等性是不合适的,因为它enum可能包含许多值,并且在enum更改中的值时还需要额外的维护.

[Flags]
enum MyEnum
{
    One = 1,
    Two = 2,
    Four = 4,
    Seven = One | Two | Four,
}

void MyFunction()
{
    foreach (MyEnum enumValue in Enum.GetValues(typeof(MyEnum)))
    {
        if (!_HasSingleValue(enumValue)) continue;

        // Guaranteed that enumValue is either One, Two, or Four
    }
}

private bool _HasSingleValue(MyEnum value)
{
    // ???
}
Run Code Online (Sandbox Code Playgroud)



相关:StackOverflow:组合标志上的Enum.IsDefined

.net c# enums flags

8
推荐指数
1
解决办法
2483
查看次数

检查枚举是否包含多个标志

我正在尝试检查“枚举实例”是否包含多个标志。

[Flags]
public enum Foo 
{
  Bar = 1,
  Far = 2
}
Run Code Online (Sandbox Code Playgroud)
var multiState = Foo.Bar | Foo.Far;

MoreThanOneFlag(multiState); // True

var singleState = Foo.Bar;

MoreThanOneFlag(singleState); // False

Run Code Online (Sandbox Code Playgroud)

另外我真的不想使用类似下面的东西:

var state = Foo.Bar | Foo.Far;

Console.WriteLine(state.ToString().Count(x => x == ',') > 0); // True

Run Code Online (Sandbox Code Playgroud)

请注意,我不关心“实例”包含哪些标志,我只想知道是否有多个标志。

c# enums enum-flags

5
推荐指数
1
解决办法
3212
查看次数

测试Flags Enum中是否只设置了一个位

所以我有一个标志枚举

public Enum test
{
   test1 = 1,
   test2 = 2,
   test3 = 4,
   etc.
}
Run Code Online (Sandbox Code Playgroud)

如何测试那一位,只设置一位?

我以前100%完成了这个,但是我的思绪不是这样的!

c# bit-manipulation enum-flags

-5
推荐指数
1
解决办法
2284
查看次数