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
Libérer: 2025-01-13 11:37:44
original
777 Les gens l'ont consulté

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 (|) :

flags = flags | FlagsEnum.Bit4; // 设置位 4
Copier après la connexion

Position d'essai

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

bool isBit4Set = (flags & FlagsEnum.Bit4) != 0;
Copier après la connexion

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 (^) :

flags = flags ^ FlagsEnum.Bit4; // 切换位 4
Copier après la connexion

Effacer le bit

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

flags = flags & ~FlagsEnum.Bit4; // 清除位 4
Copier après la connexion

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 :

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));
}
Copier après la connexion

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

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
Copier après la connexion

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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal