HOWTO · Csharp

C#에서 비트마스크 사용

이 기사에서는 C#에서 비트마스크를 사용하는 방법에 대해 알아봅니다.

이 페이지의 내용

이 게시물에서는 C#에서 비트마스크를 사용하는 방법을 살펴봅니다. 가장 중요한 것은 이 과제를 수행하는 다양한 방법이 있더라도 자신이 하고 있는 일의 이면에 있는 일반적인 아이디어를 이해하고 있다는 것입니다.

비트마스크를 활용하기 위해 메모리의 비트로 작업하게 된다는 사실을 알고 있어야 합니다.

C#에서 비트마스크 사용

C#에는 다양한 연산자가 있으며 대부분 비트 연산자라고 합니다. 이러한 연산자는 메모리의 비트 수준에서 작업을 수행합니다.

기호가 있는 비트 연산자는 다음과 같습니다.

  1. & 기호로 표시된 연산자는 AND 연산자입니다.
  2. |로 표시된 연산자 기호는 OR 연산자입니다.
  3. ~ 기호로 표시된 연산자는 NOT 연산자입니다.
  4. ^ 기호로 표시된 연산자는 XOR 연산자입니다.
  5. << 기호로 표시된 연산자는 왼쪽 시프트 연산자입니다.
  6. >> 기호로 표시된 연산자는 오른쪽 시프트 AND 연산자입니다.

AND 연산자의 작업은 다음과 같습니다.

X  Y  Res
0  0  0
0  1  0
1  0  0
1  1  1

‘Res’는 출력이고 ‘X’와 ‘Y’는 입력 가능성입니다.

OR 연산자의 작업은 다음과 같습니다.

X  Y  Res
0  0  0
0  1  1
1  0  1
1  1  1

‘Res’는 출력이고 ‘X’와 ‘Y’는 입력 가능성입니다.

NOT 연산자의 작업은 다음과 같습니다.

X  Y
1  0
0  1

Y는 출력이고 X는 입력 가능성입니다.

XOR 연산자의 작업은 다음과 같습니다.

X  Y  Res
0  0  0
0  1  1
1  0  1
1  1  0

‘Res’는 출력이고 ‘X’와 ‘Y’는 입력 가능성입니다.

left-shift 연산자의 작업은 다음과 같습니다.

x = 010110011

두 개의 왼쪽 시프트를 주면 비트가 왼쪽으로 2비트 공간 이동합니다.

x << 2

이제 x는 다음과 같습니다.

x = 011001100

그리고 오른쪽에는 두 개의 새로운 0 비트가 추가됩니다.

오른쪽 시프트 연산자의 작업은 다음과 같습니다.

x = 010110011

오른쪽으로 두 번 이동하면 비트가 왼쪽으로 2비트만큼 이동합니다.

x >> 2

이제 x는 다음과 같습니다.

x = 000101100

그리고 왼쪽에는 두 개의 새로운 0 비트가 추가됩니다. 이제 비트 연산자의 작업을 알고 있으므로 입력에 비트마스크를 적용할 수 있습니다.

비트마스크에 사용되는 가장 일반적인 연산자는 AND 연산자입니다. 두 입력이 모두 1일 때 출력이 1이기 때문에 어떤 비트가 1이고 어떤 비트가 0인지 확인하는 데 사용됩니다.

다음은 마스킹된 마지막 4비트를 평가하는 코드입니다.

using System;

namespace HelloWorld {
  class Program {
    static void Main(string[] args) {
      char x = '2';
      int y = 0b00001111;
      int z = x & y;
      Console.WriteLine(z);
    }
  }
}

메모리에 1바이트의 공간을 확보하기 위해 char 유형 변수 xint 유형 변수 y를 구성했습니다.

마지막 4비트가 1인 해당 10진수 값의 이진 버전은 0b00001111로 기록됩니다.

int z= x&y;라는 줄 비트의 and를 계산하고 그 결과를 z라는 변수에 저장합니다. z 변수는 int 데이터 유형이므로 십진수 형식으로 표현된 결과를 볼 수 있습니다.

작업은 다음과 같습니다.

x = 01111101

    y = 00001111

    z = x& y = 00001101

이것이 보이기 때문에 x 변수가 가장 최근의 4비트를 제외하고 모두 제거되었음을 알 수 있습니다. 이를 위해 AND 연산자를 사용했습니다.

마찬가지로 OR 연산자를 사용하여 비트를 결합할 수 있습니다.

이제 비트에 대한 확실한 지식이 있는 경우 비트를 가지고 놀고 암호를 생성하는 것이 이제 간단하다는 것을 알 수 있습니다.