Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C# BitArray 클래스 완벽 정리: 주요 메서드와 활용 예제

BitArray 클래스는 비트(bit) 값들을 불리언(Boolean) 형태로 저장하는 압축된 배열을 관리하는 컬렉션 클래스입니다. 이때 true는 해당 비트가 켜져 있음(1)을 의미하고, false는 비트가 꺼져 있음(0)을 의미합니다.

BitArray는 메모리를 효율적으로 사용해야 하는 플래그(flag) 관리나 비트 단위 연산이 필요한 상황에서 특히 유용하게 활용됩니다.

BitArray 클래스의 주요 메서드

다음 표는 BitArray 클래스에서 자주 사용되는 메서드들을 정리한 것입니다.

번호메서드 및 설명
1public BitArray And(BitArray value);
현재 BitArray의 각 요소와 지정된 BitArray의 대응 요소에 대해 비트별 AND 연산을 수행합니다.
2public bool Get(int index);
BitArray에서 특정 위치(index)에 있는 비트 값을 반환합니다.
3public BitArray Not();
현재 BitArray의 모든 비트 값을 반전시킵니다. 즉, true는 false로, false는 true로 변경됩니다.
4public BitArray Or(BitArray value);
현재 BitArray의 각 요소와 지정된 BitArray의 대응 요소에 대해 비트별 OR 연산을 수행합니다.
5public void Set(int index, bool value);
BitArray의 특정 위치에 있는 비트를 지정된 값으로 설정합니다.
6public void SetAll(bool value);
BitArray의 모든 비트를 지정된 값으로 한 번에 설정합니다.
7public BitArray Xor(BitArray value);
현재 BitArray의 각 요소와 지정된 BitArray의 대응 요소에 대해 배타적 OR(XOR) 연산을 수행합니다.

예제 1: BitArray 기본 사용법

다음은 BitArray 객체를 생성하고 요소를 출력한 뒤, Equals 메서드와 IsSynchronized, IsReadOnly 속성을 확인하는 예제입니다.

using System;
using System.Collections;

public class Demo {
   public static void Main() {
      BitArray arr1 = new BitArray(2);
      BitArray arr2 = new BitArray(2);

      arr1[0] = false;
      arr1[1] = true;

      Console.WriteLine("Elements in BitArray1...");
      foreach (bool res in arr1) {
         Console.WriteLine(res);
      }

      arr2[0] = false;
      arr2[1] = true;

      Console.WriteLine("Elements in BitArray2...");
      foreach (bool res in arr2) {
         Console.WriteLine(res);
      }

      Console.WriteLine("Is BitArray1 equal to BitArray2? = " + arr2.Equals(arr1));
      Console.WriteLine("Is BitArray synchronized? = " + arr2.IsSynchronized);
      Console.WriteLine("Is BitArray read-only? = " + arr2.IsReadOnly);
   }
}

실행 결과

Elements in BitArray1...
False
True
Elements in BitArray2...
False
True
Is BitArray1 equal to BitArray2? = False
Is BitArray synchronized? = False
Is BitArray read-only? = False

위 결과에서 흥미로운 점은 두 BitArray의 내용이 동일함에도 불구하고 Equals 메서드가 False를 반환한다는 것입니다. BitArray는 Equals를 재정의하지 않으므로 참조(객체) 비교를 수행하기 때문입니다. 또한 BitArray는 기본적으로 스레드 동기화가 적용되어 있지 않으며, 읽기 전용 컬렉션도 아닙니다.

예제 2: XOR(배타적 OR) 연산

다음은 두 BitArray의 요소들 사이에 배타적 OR(XOR) 연산을 수행하는 예제입니다.

using System;
using System.Collections;

public class Demo {
   public static void Main() {
      BitArray arr1 = new BitArray(5);
      BitArray arr2 = new BitArray(5);

      arr1[0] = false;
      arr1[1] = false;

      arr2[0] = false;
      arr2[1] = true;

      Console.WriteLine("BitArray1 elements...");
      foreach (bool res in arr1) {
         Console.WriteLine(res);
      }

      Console.WriteLine("\nBitArray2 elements...");
      foreach (bool res in arr2) {
         Console.WriteLine(res);
      }

      Console.WriteLine("\nBitwise exclusive OR operation...");
      IEnumerable demoEnum = arr1.Xor(arr2);
      foreach (Object ob in demoEnum) {
         Console.WriteLine(ob);
      }
   }
}

실행 결과

BitArray1 elements...
False
False
False
False
False

BitArray2 elements...
False
True
False
False
False

Bitwise exclusive OR operation...
False
True
False
False
False

XOR 연산은 두 비트의 값이 서로 다를 때만 true를 반환합니다. 위 예제에서 인덱스 1의 위치에서는 false와 true가 만나 true가 되었고, 나머지 위치에서는 같은 값(false)끼리 만나 false가 된 것을 확인할 수 있습니다. 이처럼 Xor 메서드를 활용하면 두 비트 배열 간의 차이를 손쉽게 계산할 수 있습니다.