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 중국어 웹사이트의 기타 관련 기사를 참조하세요!