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

Comment effectuer des opérations au niveau du bit sur les énumérations de drapeaux en C# ?

Patricia Arquette
Patricia Arquetteoriginal
2025-01-13 11:44:43888parcourir

How to Perform Bitwise Operations on Flags Enums in C#?

Opérations au niveau du bit de l'énumération [Flags] en C#

Lors de l'utilisation d'énumérations de drapeaux, il est crucial de maîtriser les opérations sur les bits pour gérer et manipuler de manière transparente les bits individuels au sein de la valeur d'énumération. Cette aide-mémoire est destinée à fournir un bref aperçu des opérations courantes sur les bits en C#.

Définir des bits spécifiques

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

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

Supprimer des bits spécifiques

Pour supprimer un bit spécifique, utilisez l'opérateur ET au niveau du bit et la négation du bit. Voici un exemple :

<code class="language-csharp">if ((flags & ~FlagsEnum.Bit4) == 0) {
    // 已移除位 4
}</code>

Basculer des bits spécifiques

Pour basculer un bit spécifique sur sa valeur opposée, utilisez l'opérateur XOR au niveau du bit (^).

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

Vérifiez si un bit spécifique est défini

Pour déterminer si un bit spécifique est défini, utilisez l'opérateur ET au niveau du bit, puis comparez.

<code class="language-csharp">if ((flags & FlagsEnum.Bit4) == FlagsEnum.Bit4) {
    // 设置了位 4
}</code>

Méthodes d'extension supplémentaires

L'extension de la classe System.Enum avec des méthodes personnalisées peut simplifier davantage les opérations sur les bits. Considérez l'extension suivante :

<code class="language-csharp">public static class EnumExtensions {

    public static bool Has<T>(this Enum type, T value) =>
        (((int)(object)type & (int)(object)value) == (int)(object)value);

    public static T Add<T>(this Enum type, T value) =>
        (T)(object)(((int)(object)type | (int)(object)value));

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

Ces méthodes fournissent des raccourcis pratiques pour les opérations au niveau du bit :

<code class="language-csharp">SomeType value = SomeType.Grapes;
value.Has(SomeType.Grapes); // true
value = value.Add(SomeType.Oranges);
value.Has(SomeType.Oranges); // true
value = value.Remove(SomeType.Grapes);
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