>백엔드 개발 >C++ >C#의 플래그 열거형에 대해 비트별 연산을 수행하는 방법은 무엇입니까?

C#의 플래그 열거형에 대해 비트별 연산을 수행하는 방법은 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2025-01-13 11:44:43890검색

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

C#에서 [Flags] 열거형의 비트별 연산

플래그 열거형을 사용할 때 열거형 값 내의 개별 비트를 원활하게 관리하고 조작하려면 비트 작업을 마스터하는 것이 중요합니다. 이 치트 시트는 C#의 일반적인 비트 작업에 대한 간략한 개요를 제공하기 위한 것입니다.

특정 비트 설정

[Flags] 열거형에서 특정 비트를 설정하려면 비트별 OR 연산자(|)를 사용하세요. 다음 예를 고려해보세요.

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

특정 비트 제거

특정 비트를 제거하려면 비트 AND 연산자와 비트 부정을 사용하세요. 예를 들면 다음과 같습니다.

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

특정 비트 전환

특정 비트를 반대 값으로 전환하려면 비트 XOR 연산자(^)를 사용하세요.

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

특정 비트가 설정되어 있는지 확인

특정 비트가 설정되었는지 확인하려면 비트 AND 연산자를 사용한 다음 비교하세요.

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

추가 확장 방법

사용자 정의 메서드로 System.Enum 클래스를 확장하면 비트 작업을 더욱 단순화할 수 있습니다. 다음 확장을 고려해보세요:

<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>

이러한 방법은 비트 연산에 대한 편리한 단축키를 제공합니다.

<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>

위 내용은 C#의 플래그 열거형에 대해 비트별 연산을 수행하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.