gpt4 book ai didi

c# - 枚举中两个变量中的标志数

转载 作者:太空宇宙 更新时间:2023-11-03 19:45:03 24 4
gpt4 key购买 nike

我有以下枚举:

[Flags]
public enum Letter
{
NONE = 0,
A = 1,
B = 2,
C = 4,
A_B = A | B,
A_C = A | C,
B_C = B | C,
ALL = A | B | C
}

我有以下代码:

Letter first = Letter.A_B;
Letter second = Letter.B_C;

如何获取 first 变量和 second 变量中的标志数?

我想要的结果:

Letter first = Letter.A_B;
Letter second = Letter.B_C;
int numberOfSameFlags = ...; // should return 1 in this example

Letter first = Letter.A_B;
Letter second = Letter.ALL;
int numberOfSameFlags = ...; // should return 2 in this example

我尝试了按位运算,但我认为我无法从中获得这个值。

最佳答案

您可以将标志与在一起,然后计算设置位的数量(这称为整数的 "Hamming Weight")。

一种计算集合位的方法(有很多,这是我从网上抓到的):

public static int HammingWeight(int i)
{
i = i - ((i >> 1) & 0x55555555);
i = (i & 0x33333333) + ((i >> 2) & 0x33333333);
return (((i + (i >> 4)) & 0x0F0F0F0F) * 0x01010101) >> 24;
}

所以对于你的问题:

Letter first = Letter.A_B;
Letter second = Letter.B_C;
Console.WriteLine(HammingWeight((int)first & (int)second));

和:

Letter first = Letter.A_B;
Letter second = Letter.ALL;
Console.WriteLine(HammingWeight((int)first & (int)second));

如果您想知道该特定实现的工作原理,see here .

关于c# - 枚举中两个变量中的标志数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46731789/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com