Study/C#, Winform

[C#] 바이트 배열을 이용한 비트 다루기 : BitArray

2023. 7. 15. 22:57
목차
  1. BitArray 생성자
  2. BitArray 메소드 - Set(Int32, Boolean)
  3. BitArray 메소드 - Get(Int32)
  4. BitArray 메소드 - And(BitArray)
  5. BitArray 메소드 - Or(BitArray)
  6. BitArray 메소드 - Xor(BitArray)
  7. BitArray 메소드 - Not()
  8. BitArray 메소드 - RightShift(Int32)
  9. BitArray 메소드 - LeftShift(Int32)
  10. BitArray 메소드 - CopyTo(Array, Int32)
  11. BitArray 속성 - Count와 Length

C#을 다루면서 비트를 다룰 때 생각보다 많이 사용하게되는 BitArray입니다.

바이트 배열을 넣어서 사용하기도 하고 비트의 개수를 넣어서 사용하기도 합니다.

 

BitArray 생성자

using System.Collections;    // BitArray를 사용하기 위함

// length 만큼의 길이를 가진 비트배열을 만듬 (모든 비트는 0)
public BitArray(int length);

// length 만큼의 길이를 가진 비트배열을 만들고 기본값을 defaultValue로 설정
public BitArray(int length, bool defaultValue)

// 바이트 배열을 비트배열로 만듬
// 예) bytes = byte[2] -> BitArray를 16칸 자리를 만듬
//     (BitArray[0~7] = bytes[0], BitArray[8~15] = bytes[1])
public BitArray(byte[] bytes)

// Boolean 값을 토대로 비트배열을 만듬
// 예) { false, false, true, false }을 넣으면 4비트짜리 배열을 만듬 (0100)
public unsafe BitArray(bool[] values)

BitArray는 위의 생성자를 주로 사용하게 됩니다.

 

위의 생성자에서 보면 BitArray는 비트 표현을 boolean으로 하게 됩니다.

0은 false, 1은 true로 표현합니다.

 

BitArray 메소드 - Set(Int32, Boolean)

// index 위치의 비트를 value로 설정
public void Set(int index, bool value)

// 예시
BitArray bitArray = new BitArray(8);  // 00000000 = 0
bitArray.Set(2, true);                // 00000100 = 4

 

BitArray 메소드 - Get(Int32)

// index 위치의 비트 값을 bool값으로 반환
public bool Get(int index)

// 예시
BitArray bitArray1 = new BitArray(new bool[] {true, false, true, false}); // 0101 = 5
bool bBit3 = bitArray1.Get(2);  // true

 

BitArray 메소드 - And(BitArray)

// value와 And 연산을 수행한 결과를 반환
// 단, value와 BitArray 길이는 같아야함(같지 않으면 ArgumentException)
public unsafe BitArray And(BitArray value)

// 예시
BitArray bitArray1 = new BitArray(new byte[] {21}); // 00010101
BitArray bitArray2 = new BitArray(8, true);         // 11111111
BitArray bitArrayAND = bitArray1.And(bitArray2);    // 00010101

 

BitArray 메소드 - Or(BitArray)

// value와 Or 연산을 수행한 결과를 반환
// 단, value와 BitArray 길이는 같아야함(같지 않으면 ArgumentException)
public unsafe BitArray Or(BitArray value)

// 예시
BitArray bitArray1 = new BitArray(new byte[] {21}); // 00010101
BitArray bitArray2 = new BitArray(8, true);         // 11111111
BitArray bitArrayOR = bitArray1.Or(bitArray2);      // 11111111

 

BitArray 메소드 - Xor(BitArray)

// value와 XOR 연산을 수행한 결과를 반환
// 단, value와 BitArray 길이는 같아야함(같지 않으면 ArgumentException)
public unsafe BitArray Xor(BitArray value)

// 예시
BitArray bitArray1 = new BitArray(new byte[] {21}); // 00010101
BitArray bitArray2 = new BitArray(8, true);         // 11111111
BitArray bitArrayXOR = bitArray1.Xor(bitArray2);    // 11101010

 

BitArray 메소드 - Not()

// 반전(NOT)을 수행한 결과를 반환
public unsafe BitArray Not()

// 예시
BitArray bitArray = new BitArray(new byte[] {21}); // 00010101
BitArray bitArrayNOT = bitArray.Not();             // 11101010

 

BitArray 메소드 - RightShift(Int32)

// 오른쪽으로 count만큼 시프트한 결과를 반환
public BitArray RightShift(int count)

// 예시
BitArray bitArray = new BitArray(new byte[] {21}); // 00010101
BitArray bitArrayRS = bitArray.RightShift(4);      // 00000001

 

BitArray 메소드 - LeftShift(Int32)

// 왼쪽으로 count만큼 시프트한 결과를 반환
public BitArray LeftShift(int count)

// 예시
BitArray bitArray = new BitArray(new byte[] {21}); // 00010101
BitArray bitArrayLS = bitArray.LeftShift(4);       // 01010000

 

BitArray 메소드 - CopyTo(Array, Int32)

// BitArray의 값을 array의 index 위치에 복사
// BitArray의 값을 byte 배열로 변환하는데 많이 사용함
public unsafe void CopyTo(Array array, int index)

// 예시
BitArray bitArray = new BitArray(new byte[] {21}); // 00010101
BitArray bitArrayLS = bitArray.LeftShift(4);       // 01010000

int nByteArr = bitArrayLS.Count / 8 + bitArrayLS.Count % 8; // 비트 길이 계산
byte[] bytes = new byte[nByteArr];   // bytes = new byte[1];
bitArrayLS.CopyTo(bytes, 0);         // bytes[0] = 80

 

BitArray 속성 - Count와 Length

BitArray에는 Count와 Length라는 속성이 있는데 둘은 같은 BitArray의 길이라는 값을 반환합니다.

대신 Count는 Get만 할 수 있고 Length는 Get, Set 둘 다 할 수 있습니다.

 

저작자표시 비영리 변경금지

'Study > C#, Winform' 카테고리의 다른 글

[C#, Winform] Cross Thread(UI Thread) 처리, InvokeRequired  (0) 2024.05.26
[C#] 바이트 배열 다루기 : BitConverter  (0) 2023.08.16
[C# Winform] PropertyGrid 에서 DisplayName 우선순위  (0) 2022.12.26
[C#] 배열 정렬 기능 (Sort)  (0) 2022.12.10
[C# Winform] DataGridView Column Header Drag (컬럼 헤더 드래그)  (0) 2022.10.24
  • BitArray 생성자
  • BitArray 메소드 - Set(Int32, Boolean)
  • BitArray 메소드 - Get(Int32)
  • BitArray 메소드 - And(BitArray)
  • BitArray 메소드 - Or(BitArray)
  • BitArray 메소드 - Xor(BitArray)
  • BitArray 메소드 - Not()
  • BitArray 메소드 - RightShift(Int32)
  • BitArray 메소드 - LeftShift(Int32)
  • BitArray 메소드 - CopyTo(Array, Int32)
  • BitArray 속성 - Count와 Length
'Study/C#, Winform' 카테고리의 다른 글
  • [C#, Winform] Cross Thread(UI Thread) 처리, InvokeRequired
  • [C#] 바이트 배열 다루기 : BitConverter
  • [C# Winform] PropertyGrid 에서 DisplayName 우선순위
  • [C#] 배열 정렬 기능 (Sort)
Eskeptor
Eskeptor
Eskeptor
Hello World
Eskeptor
전체
오늘
어제
  • 분류 전체보기 (138)
    • Computer (5)
      • Linux (1)
      • Hardware (2)
      • Software (0)
      • Tips (1)
      • Website (0)
    • Mobile (1)
      • Application (1)
    • Study (108)
      • Android (9)
      • C언어 (45)
      • C++ (17)
      • Unity 5(유니티5) (11)
      • Qt 프로그래밍 (2)
      • MFC (12)
      • C#, Winform (12)
    • My World (24)
      • OpenPad(Android) (12)
      • 한글 패치 (1)
      • C#으로 만든 귀요미들 (5)
      • MFC로 만든 귀요미들 (6)
    • Life Goes On (0)
      • Hip Hop (0)

블로그 메뉴

  • 홈
  • 태그
  • 미디어로그
  • 위치로그
  • 방명록

공지사항

인기 글

태그

  • C언어
  • C#
  • 알고리즘
  • 안드로이드
  • Tetris
  • 프로그래밍
  • 강좌
  • 메모장
  • 자료구조
  • C++
  • 오픈패드
  • 왕초보
  • 슈팅게임
  • 자바
  • MFC
  • 강의
  • 테트리스
  • c++11
  • 유니티
  • Java
  • 만들기
  • 기초
  • 포인터
  • Unity
  • 배열
  • Android
  • openpad
  • 비행기
  • 초보
  • 기본

최근 댓글

최근 글

hELLO · Designed By 정상우.
Eskeptor
[C#] 바이트 배열을 이용한 비트 다루기 : BitArray
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.