Programming

C# 숫자에 2진수 값을 코드에 넣는 방법 - Binary literals , BitArray

DragonTory 2021. 3. 4. 12:37
반응형

1. C# 숫자에 2진수 값을 코드에 넣는 방법 - Binary literals

 

코드에서 Flag 같은 enum이나 비트를 다룰 때 값을 직관적으로 보게 하면 편할 때가 있다. 

다음과 같이 2진수 값을 변수에 할당 할 수 있다.

 

byte num = 1;

byte num = 0b0000_0001;

 

위와 같이 숫자에 0b를 사용 하면 바이너리를 표현 할 수 있다. 

여기서 언더바( _ )는 있어도 없어도 상관 없다. 

 

다른 예)

[Flags]
enum Flag
{
    None = 0,
    Flag01 = 1,
    Flag02 = 1 << 1,
    Flag03 = 1 << 2,
    Flag04 = 1 << 3,
}

[Flags]
enum Flag
{
    None = 0,
    Flag01 = 0b00000001,
    Flag02 = 0b00000010,
    Flag03 = 0b00000100,
    Flag04 = 0b00001000,
}

[Flags]
enum Flag
{
    None = 0,
    Flag01 = 0x01,
    Flag02 = 0x02,
    Flag03 = 0x04,
    Flag04 = 0x08,
}

 

2. 2진수 바이너리 숫자에서 문자열로 변환

2진수 문자열에서 숫자로 변환

 

byte num = Convert.ToInt32("00000001", 2);

Convert.ToString(num, 2).PadLeft(8, '0');

 

PadLeft()는 스트링을 8자리로 만들고 빈자리에 0을 채워 줌.

 

3. Bit 플래그 값 비교

num 변수에 원하는 플래그 값이 있는지 체크 하기 위해서

(num >> 2) & 0x01) == 0x01

와 같은 shift 연산자를 이용 하던지

(num & 0x04) == 0x04

(num & Flag.Flag03 ) == Flag.Flag03

직접 값을 비교 하던지 할 수 있다. 

 

다른 방법으론

using System.Linq;

BitArray ba = new BitArray(  BitConverter.GetBytes(num).ToArray());

if( ba[5] == true)

{
}

위와 같이 BitArray를 사용 할 수도 있는데

이 클래스를 사용 하면 인텍스로 해당 값을 비교 할 수 있다.

 

단, 주의 할 점은 배열 인덱스 순서가 코드상에서 표기 하는 

0000_0001 의 순서가 아닌 

메모리상에 저장된 순서로 값을 확인 할 수 있다. 

( 1 0 0 0  0 0 0 0 )

(BitConverter.IsLittleEndian == true 일때)

 

즉, 여기서 ba[0] == 0 이 아니고 ba[0] == 1 이 된다. 

 

 

 

C# 2진수 처리, 바이너리 처리

반응형