Maison >développement back-end >C++ >Comment effectuer des opérations au niveau du bit sur les énumérations de drapeaux en 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!