구조체 안의 비트필드
구조체 안에서 선언될 수 있는 비트필드란 개념을 배워보겠다.
필드란 무엇인가? 필드는 물리나 공학분야에서 주로 사용되는 분야로…. 어떤 닫힌 계를 말한다. 나중에 데이터베이스를 배우면 record field라는것도 배운다.
C교과서에선, 비트가 연속적으로 나열되어있는 메모리를 비트필드라고 한다.
C에선 이를 구현하기 위해 구조체를 사용한다.
강의 앞에서 비트 마스크를 사용하는걸 배웠다.
비트단위 연산자를 사용하면 정보를 훨씬 더 작은 메모리공간에서 다룰 수 있다.
하지만 이는 마스크들을 정의해주느라 코드가 깔끔해보이지 않는다.. 단지 변수만 사용해서 기능을 구현할 수 있지 않을까?
C에서 비트필드를 이용해서 해당 기능이 가능하도록 문법을 지원함.
비트필드에서 가장 중요한건 바로 구조체이다. 구조체 안에 bool타입이 있고, 콜론이 있다. 콜론 뒤의 숫자는 해당 정보에 몇 bits를 사용할지를 결정하는 숫자이다.
위의 예시는 모두 1bit만 쓰므로, 총 1byte임.
또한 사용례에서, 그전까지는 or연산자를 활용해 0을 1로 바꿨지만.. 보다시피 items_flag.has_sword
에 1을 대입하는 것만으로도 원하는 기능을 사용가능함. 훨씬 간단하고 직관적임.
하지만 비트필드는 비트마스크를 이용한 기능과 혼용해서 사용됨. 비트필드가 비트마스크를 온전히 대체 x
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
비트필드의 사용방법