티스토리 뷰

C C++/C++

[C++] 비트 구조체

개발하는꼬물이 2018. 5. 18. 10:58

1. 비트구조체란?

  - 비트(Bit)를 멤버로 가지는 구조체로, Bit Field라고도 함


2. 선언 방법 

typedef struct 구조체명 {

변수타입 멤버1 : 비트수,

멤버2 : 비트수,

.....

멤버n : 비트수;

} 구조체변수명;

  - 비트 수는 원칙적으로 정수만 가능하며, 변수의 크기와 할당한 비트수의 합은 일치해야 함!

     ex) UINT16을 이용해 비트를 할당했으면, 비트수의 합은 16이 되어야 함

  - 일반적으로 비트로 표현해야 할 정보는 수치값이라기보다는 기호, 표식인 경우가 많아 부호를 쓰는 경우는 드물고,

     따라서 비트 구조체의 멤버들은 보통 unsigned 타입


3. 예제
typedef struct Bit_Field
{
    UINT32 m_DataBit1 : 4,   // UINT32(부호없는 32비트 정수) 형의 변수를 선언했으므로, 
                             //Bit_Field 멤버들의 합은 32가 되야 함
            m_DataBit2 : 4,
            m_DataBit3 : 4,
            m_DataBit4 : 4,
            m_DataBit5 : 16;
} sBit_Field;

=> 위와 같이 구조체를 정의했을 때,


     m_DataBit1은 0~3(4Bit), m_DataBit2는 4~7(4Bit), m_DataBit3은 8~11(4Bit), m_DataBit4는 12~15(4Bit), 

     m_DataBit 5는 16~32(16Bit) 의 비트 공간을 할당받는다.


     여기서, SBit_Field.m_DataBit3 = 5; 의 코드로 3번에 할당된 비트의 값을 0101로 변경한다면

     8번째, 10번째 비트가 1이 되어 값은 0000 0000 0000 0000 0000 0101 0000 0000 이 될 것이다.


     또한, 비트 값을 변경할 때 10진수 숫자 대신 다음과 같이 입력하여 비트값을 변경할수도 있다.

     SBit_Field.m_DataBit2 = 0b1110;   => 0000 0000 0000 0000 0000 0000 1110 0000 

  

    

 



'C C++ > C++' 카테고리의 다른 글

[C++] 난수 생성 - rand(), srand()  (0) 2018.05.04
Linux 환경에서의 pthread  (0) 2018.02.17
[C++] SingleTon Pattern  (0) 2018.02.17
[C++] this  (0) 2018.02.17
[C++] \n과 \r의 차이  (0) 2017.12.06
댓글