Maison >développement back-end >C++ >Comment effectuer des opérations au niveau du bit sur les énumérations C# [Flags] ?

Comment effectuer des opérations au niveau du bit sur les énumérations C# [Flags] ?

Patricia Arquette
Patricia Arquetteoriginal
2025-01-13 11:37:44719parcourir

How to Perform Bitwise Operations on C# [Flags] Enums?

Utilisez l'énumération C# [Flags] pour effectuer des opérations sur les bits

Les énumérations avec l'attribut [Flags] permettent la manipulation de bits individuels dans la représentation entière sous-jacente. Cela permet une représentation succincte des masques de bits, où chaque bit représente un indicateur ou une option spécifique.

Définir le bit

Pour définir un bit dans l'énumération [Flags], utilisez l'opérateur OR au niveau du bit (|) :

<code class="language-csharp">flags = flags | FlagsEnum.Bit4; // 设置位 4</code>

Position d'essai

Pour tester si un bit est défini, utilisez l'opérateur ET au niveau du bit (&) :

<code class="language-csharp">bool isBit4Set = (flags & FlagsEnum.Bit4) != 0;</code>

Basculer la position

Pour basculer un peu (définir s'il n'est pas défini, effacer s'il est défini), utilisez l'opérateur XOR au niveau du bit (^) :

<code class="language-csharp">flags = flags ^ FlagsEnum.Bit4; // 切换位 4</code>

Effacer le bit

Pour effacer des bits, utilisez l'opérateur ET au niveau du bit (&) et le complément du masque de bits :

<code class="language-csharp">flags = flags & ~FlagsEnum.Bit4; // 清除位 4</code>

Méthode d'extension personnalisée

Pour plus de commodité, les méthodes d'extension suivantes peuvent être définies pour simplifier ces opérations :

<code class="language-csharp">public static bool Has<T>(this System.Enum type, T value) {
    return (((int)(object)type & (int)(object)value) == (int)(object)value);
}

public static bool Is<T>(this System.Enum type, T value) {
    return (int)(object)type == (int)(object)value;
}

public static T Add<T>(this System.Enum type, T value) {
    return (T)(object)(((int)(object)type | (int)(object)value));
}

public static T Remove<T>(this System.Enum type, T value) {
    return (T)(object)(((int)(object)type & ~(int)(object)value));
}</code>

Ces méthodes d'extension peuvent être utilisées comme suit :

<code class="language-csharp">SomeType value = SomeType.Grapes;
bool isGrapes = value.Is(SomeType.Grapes); // true
bool hasGrapes = value.Has(SomeType.Grapes); // true

value = value.Add(SomeType.Oranges);
value = value.Add(SomeType.Apples);
value = value.Remove(SomeType.Grapes);

bool hasOranges = value.Has(SomeType.Oranges); // true
bool isApples = value.Is(SomeType.Apples); // false
bool hasGrapes = value.Has(SomeType.Grapes); // false</code>

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn