Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 저조도
- 저장소와 동적메모리
- Pixel Bit Format
- 이미지센서
- Patch Cleaner
- c언어
- 렌즈
- 간단한 앱만들어보기
- ASCCII
- C Mount
- camera
- Zoom Lense
- 실생활알고리즘
- AppInventer
- 아이리스
- main 함수 인자 전달
- CS Mount
- image sensor
- Digital Slow Shutter
- 프로그래머스 lv2
- Depth of Fileld
- 고정비트레이트
- 과초점거리
- 조건 제어문
- 변수의 초기화와 대입
- 변수
- 무게선별자동화
- 카메라
- 심도
- Gain
Archives
- Today
- Total
카메라 개발자 공부방(SW)
[28장] 비트필드 본문
반응형
자 오늘은 비트 필드에 대해 공부해볼 시간입니다.
C언어에서 연산을 할 수 있는 메모리의 최소 단위가 얼마일까요? 바로~ 1byte입니다.
그런데 이 1byte 보다 작은 단위의 연산을 필요로 하는 경우 어떻게 해야 될까요? 이때 비트 필드가 사용될 수 있습니다.
지금은 메모리 기술이 비약적으로 발전했기 때문에 메모리 자원이 넘치죠?
1byte쯤은 무시할 수 있지만, 과거엔 1byte 마저 소중했기 때문에 bit를 쪼개서 메모리를 관리하였답니다.
(임베디드 산업에선 여전히 메모리 리소스가 부족하기 때문에 bit 단위로 쪼개서 데이터에 저장을 합니다. 사용하는 방법을 제대로 알면 유용하게 사용할 수 있습니다.)
비트 필드를 선언하는 방법은 다음과 같습니다.
typedef struct bitfield {
int flag : 1;
int reserved : 30;
} BitField;
구조체를 선언한 후 ':'와 사용할 bit를 선언하면 비트 필드를 사용할 수 있습니다.
#include <stdio.h>
typedef struct bitfield
{
int flag : 1;
int reserved : 31;
} BitField;
int main()
{
BitField data;
data.flag = 1;
data.reserved = 255;
return 0;
}
위의 코드를 메모리로 그려보면 다음과 같습니다.
32bit 메모리 중 1bit는 flag 메모리로 사용하고, 나머지 bit는 reserved 메모리로 사용하겠다는 의미입니다.
다음 예제를 또 볼까요?
#include <stdio.h>
typedef struct bitfield
{
int a : 8;
int b : 8;
int c : 8;
int d : 8;
} BitField;
int main()
{
BitField data = {1, 2, 4, 8};
return 0;
}
32bit 메모리 중 8bit 씩을 a, b, c, d에 메모리에 할당해서 사용한다는 의미입니다.
16진수로 변환된 메모리가 32bit 메모리에 8bit씩 나눠져서 저장되고 있는 것을 확인할 수 있습니다.
#include <stdio.h>
typedef struct bitfield
{
unsigned a : 8;
unsigned b : 8;
unsigned c : 8;
unsigned d : 8;
} BitField;
int main()
{
BitField data = {1, 2, 4, 8};
return 0;
}
unsigned int는 'int'를 생략해서 표현할 수 있습니다.
#include <stdio.h>
typedef struct bitfield
{
unsigned a : 1;
unsigned b : 1;
unsigned : 2;
unsigned : 4;
unsigned c : 8;
unsigned d : 8;
unsigned e : 8;
} BitField;
int main()
{
BitField data = {1, 1, 1, 1, 1};
printf("%x\n", data);
return 0;
}
위의 예제에 대해 결과를 고민해보세요~
2bit. 4bit 메모리에는 이름이 없습니다.
자 오늘은 여기까지!
'Langauge > C' 카테고리의 다른 글
[27장] union (0) | 2021.10.20 |
---|---|
[25장] main 함수의 인자전달 (0) | 2021.10.18 |
[26장] 가변인자 (0) | 2021.10.17 |
[24장] const (0) | 2021.10.13 |
[23장] 파일 입출력 (0) | 2021.10.12 |
Comments