본문 바로가기
프로그래밍/C Sharp

[ C# ] 비트연산 처리 모음

by jeong-f 2021. 11. 19.
반응형

프로그램을 하다 보면 통신이나 외부 장치와의 연결 과정에서 비트 연산을 하여 처리해야 할 경우들이 많이 발생합니다.
인터넷을 돌아다니며 하나하나 찾기에는 시간이 많이 부족하여 지금까지 모아 온 자료들을 공유드립니다.

소스코드

데이터 반전

만약 [ 0xFF, 0x00 ]이 입력되면 [ 0x00 ,0xFF ]로 앞뒤 자리를 바꿔주는 역할입니다.

public static void Swap<T>(ref T _i, ref T _j) where T : struct
{
    T temp;
    temp = _i;
    _i = _j;
    _j = temp;
}

비트 체크

data 안에 몇 번째 비트가 On 되어 있는지 확인하는 함수입니다.

public static bool Check_Bit(double _data, int loc)
{
    int val = (0x1 << loc);
    return ((int)_data & val) == val;
}

비트 켜기

입력된 data에서 특정 위치의 한 비트만을 On 시키는 함수입니다.

public static int Set_Bit(double _data, int _loc)
{
    return ((int)_data | (byte)(0x01 << _loc));
}

비트 끄기

data 안에 특정 위치의 비트를 Off 하는 함수입니다.

public static int Clear_Bit(double _data, int loc)
{
    return ((int)_data & ~(0x01 << loc));
}

비트 연속 끄기

data 안에서 시작 번지(loc)에서 개수(area) 데이터들을 Off 하는 함수입니다.

public static int Clear_Bits(double _data, int _area, int _loc)
{
    return ((int)_data & ~(_area << _loc));
}

비트 연속 켜기

data 안에서 시작 번지(loc)에서 개수(area) 데이터들을 On 하는 함수입니다.

public static int Set_Bit(double _data, int _area, int _loc)
{
    return ((int)_data | ~(_area << _loc));
}

비트 연속 반전

data 안에서 특정 위치(loc) 비트를 반전(On→Off / Off→On) 하는 함수입니다.

public static int Invert_Bit(double _data, int _loc)
{
    return ((int)_data ^ (0x01 << _loc));
}

비트 영역 연속 끄기

data 안에서 시작 위치(loc)에서 개수(area) 만큼 비트들을 반전(On→Off / Off→On) 하는 함수입니다.

public static int Invert_Bit(double _data, int _area, int _loc)
{
    return ((int)_data ^ (_area << _loc));
}

비트 영역 확인

data 안에서 시작 위치(loc)에서 개수(area)만큼의 비트들이 On/Off 상태인지 확인합니다.

public static int Extract_Bit(double _data, int _area, int _loc)
{
    return ((int)_data >> _loc) & _area;
}

데이터 반전

data의 값을 반전시킵니다 (0 xFFFF → 0x0000)

public static int Invert_Data(int _data)
{
    return ~_data;
}
반응형

댓글