비트필드
비트필드는 간단하게, 1byte를 8bits로 쪼개서 보는 구조체다. 코드를 보면 unsiged char자료형의 맴버가 4개가 있는 구조체다. (각각 main, left, right, top의 이름을 가지고 있다.) 이 구조체에서 맴버의 초깃값이 main=0, left=3, right=7, top=1이다. 이것을 비트로 쪼개면 어떻게 될까? 비트(bits)는 예전의 2진수를 떠올리면 된다. 1,2,4순으로 자릿수가 올라간다. 그러므로 이것을 그림으로 그리고, 숫자를 표현하자면, 오른쪽과 같다. 00111110을 다시 16진수로 표현하면 4비트씩 끊어서 해석하므로 ‘0×3E’가 된다. 이때, 초깃값을 따로 불러서 대입한다면, 맴버 main은 0~1의 범위를 벗어나면, 값이 기록이 되지 않고, 나머지 맴버도 마찬가지가 된다.
공용체(union)
공용체(union)는 구조체와 대비된다. 구조체는 여러 자료형이 뭉쳐서 하나로 쓰이게 되는 것으로, 여러 개가 하나로 해석되지만, 공용체는 반대로 하나의 덩어리를 여러 가지로 해석해서 하나가 여러 개로 해석된다.
공용체의 형식은 구조체와 같다. 하나의 메모리를 여러개로 해석하게 해서, 융통성있는 자료 해석이 목적이다. 그래서 (int)4바이트를 (char[2])1바이트로 쪼개서, (short[2])2바이트로도 쪼개서 쓸 수 있는 것이다.
공용체의 활용
tcp/ip 소켓 프로그래밍에 유용하게 쓰인다. ip주소가 32비트로 표현되면, 8*4로, ~.~.~.~의 ip주소 ~하나에 8비트가 되고, 이것은 2^8으로 256, 표현범위는 0~255가 된다. 아무튼 그때 ip주소를 경우에 따라 일일이 맞춰줘야 되는데, 그것을 공용체로 대신해서, 계산을 생략할 수 있다. 사실 그거 이외는 잘 안 쓴다. (경우에 따라서 다르긴 하다) 그러니까 정의만 잘 알아두자.
추가로 알아둘 점
사실 구조체는 ‘자기 참조 구조체’로 엄청 많이 쓰인다. 자료구조와 ‘연결 리스트’를 영상에서 강조하는 이유가 그 이유에서다. 연결 리스트를 추가, 검색하고 삭제하는 이것을 꼭 중요하게 알아두자. (사실 다음 강의에 또 연결 리스트가 나온다.)
'c언어 > 워딩(미정리)' 카테고리의 다른 글
정렬 및 연습문제 (0) | 2019.07.08 |
---|---|
선형구조 및 연결 리스트 (0) | 2019.07.08 |
자기참조 구조체 (0) | 2019.07.08 |
구조체의 선언과 활용 (0) | 2019.07.08 |
함수 호출 규약 (0) | 2019.07.08 |