ホームページ > バックエンド開発 > C++ > C# [フラグ] 列挙型でビット単位の操作を実行する方法?

C# [フラグ] 列挙型でビット単位の操作を実行する方法?

Patricia Arquette
リリース: 2025-01-13 11:37:44
オリジナル
718 人が閲覧しました

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

C# [Flags] 列挙を使用してビット操作を実行します

[Flags] 属性を持つ列挙では、基になる整数表現の個々のビットを操作できます。これにより、各ビットが特定のフラグまたはオプションを表すビット マスクの簡潔な表現が可能になります。

ビットをセット

[Flags] 列挙にビットを設定するには、ビットごとの OR 演算子 (|) を使用します。

<code class="language-csharp">flags = flags | FlagsEnum.Bit4; // 设置位 4</code>
ログイン後にコピー

テストポジション

ビットが設定されているかどうかをテストするには、ビットごとの AND 演算子 (&) を使用します。

<code class="language-csharp">bool isBit4Set = (flags & FlagsEnum.Bit4) != 0;</code>
ログイン後にコピー

位置を切り替えます

ビットを切り替えるには (設定されていない場合は設定、設定されている場合はクリア)、ビットごとの XOR 演算子 (^) を使用します。

<code class="language-csharp">flags = flags ^ FlagsEnum.Bit4; // 切换位 4</code>
ログイン後にコピー

クリアビット

ビットをクリアするには、ビットごとの AND 演算子 (&) とビット マスクの補数を使用します。

<code class="language-csharp">flags = flags & ~FlagsEnum.Bit4; // 清除位 4</code>
ログイン後にコピー

カスタム拡張メソッド

便宜上、これらの操作を簡素化するために次の拡張メソッドを定義できます:

<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>
ログイン後にコピー

これらの拡張メソッドは次のように使用できます:

<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>
ログイン後にコピー

以上がC# [フラグ] 列挙型でビット単位の操作を実行する方法?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート