일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 아이리스
- C Mount
- 저조도
- Zoom Lense
- Gain
- camera
- image sensor
- 무게선별자동화
- AppInventer
- 심도
- CS Mount
- 이미지센서
- 렌즈
- Patch Cleaner
- Digital Slow Shutter
- 고정비트레이트
- 프로그래머스 lv2
- 카메라
- Pixel Bit Format
- Depth of Fileld
- 저장소와 동적메모리
- 간단한 앱만들어보기
- main 함수 인자 전달
- 과초점거리
- ASCCII
- c언어
- 변수의 초기화와 대입
- 조건 제어문
- 실생활알고리즘
- 변수
- Today
- Total
카메라 개발자 공부방(SW)
[6장] 자료형(data type) 본문
자료형은 메모리를 어떤 용도로 얼만큼의 메모리 사용할지 관한 것으로 C언어에 미리 다 약속이 되어있답니다.
다음은 반드시 외워야 될 자료형입니다!
Data Type | 부호 | 사용 용도 | 크기 | 표현 가능 범위 |
char | 문자 | 1byte | 0 ~ 255 | |
short | 있음(signed) | 정수 | 2byte | -32,768 - 32767 |
int | 있음(signed) | 정수 | 4byte | -2,147,483,648 ~ 2,147,483,647 |
long | 있음(signed) | 정수 | 4byte | -2,147,483,648 ~ 2,147,483,647 |
long long | 있음(signed) | 정수 | 최소 8byte | 2^63 ~ 2^63 -1 |
float | 소수점 | 4byte | 대략 10^-38 ~ 10^ 38 |
|
double | 소수점 | 8byte | 대략 10^-308 ~ 10^ 308 |
char 형은 1byte라는 메모리 공간에 문자만 저장할 용도로 사용하겠다는 뜻이고
short, int, long, long long는 데이터 type 마다 메모리를 얼만큼 사용할지, 정수만 저장할 용도로 약속되어있습니다.
1byte는 8bit이기 때문에 할당된 비트에 따라 표현할 수 있는 범위가 다른데요.
1bit로 표현할 수 있는 가짓수는 2 가지고 (꺼진다(0), 켜진다(1))
2bit로 표현할 수 있는 가짓수는 4가지입니다. 00, 01, 10, 11
3bit로 표현할 수 있는 가짓수는 8가지입니다. 000, 001, 010, 011, 100, 101, 110, 111
n-bit는 2^n으로 데이터를 표현할 수 있답니다.
그리고 음수를 표현해야 된다면, 음수인지 아닌지 표기하는 bit가 하나 필요합니다.
00000000 00000000 00000000 00000000(양수)
10000000 00000000 00000000 00000000(음수)
부호가 있는 수라면 signed 비트 수를 제외한 비트만큼만 데이터의 표현이 가능합니다.
부호가 없는 수라면 signed 비트 수까지 포함하여 더 많은 수의 정수를 표현 할 수 있습니다.
다음은 부호가 없는 unsigned에 대한 data type 표 입니다.
Data Type | 부호 | 사용 용도 | 크기 | 표현 가능 범위 |
unsigned short | 없음(unsigned) | 정수 | 2byte | 0 ~ 65,535 |
unsigned int | 없음(unsigned) | 정수 | 4byte | 0 ~ 4,294,967,295 |
unsigned long | 없음(unsigned) | 정수 | 4byte | 0 ~ 4,294,967,295 |
unsigned long long | 없음(unsigned) | 정수 | 최소 8byte | 0 ~ 2^64 |
다음은 <inttypes.h>에 선언된 자료형에 대한 정보입니다(참고용).
Data Type | 부호 | 사용 용도 | 크기 | 표현 가능 범위 |
int8_t | 있음(signed) | 정수 | 1 byte | -128 ~ 127 |
uint8_t | 없음(unsigned) | 정수 | 1 byte | 0 ~ 255 |
int16_t | 있음(signed) | 정수 | 2 byte | -32,768 ~ 32,767 |
uint16_t | 없음(unsigned) | 정수 | 2 byte | 0 ~ 65,535 |
int32_t | 있음(signed) | 정수 | 4 byte | -2,147,483,648 ~ 2,147,483,647 |
uint32_t | 없음(unsigned) | 정수 | 4 byte | 0 ~ 4,294,967,295 |
int64_t | 있음(signed) | 정수 | 8 byte | 2^63 ~ 2^63 -1 |
uint64_t | 없음(unsigned) | 정수 | 8 byte | 0 ~ 2^64 |
long long | 있음(signed) | 정수 | 최소 8 byte | 0 ~ 2^64 |
또. 실수부와 정수부를 비트로 저장하는 방식에 차이가 있습니다.
실수의 표현은 정수부와 가수부로 비트를 나눠서 표현을 합니다.
(이 부분은 따로 일단 스킵하고 다음에 포스팅하겠습니다.)
미리 약속을 해놨기 때문에 정수형 data type엔 소수점을 저장할 수가 없게 됩니다.
#include <stdio.h>
int main()
{
int val = 3.141592;
printf("%d\n", val)
return 0;
}
// 실행 결과
// 3
소수점을 다루기 위해선 float이나 double data type을 사용해야 합니다.
#include <stdio.h>
int main()
{
float val = 3.141592f;
printf("%f\n", val);
return 0;
}
// 실행결과
// 3.141592f
그런데 data type이 다른 변수끼리 연산을 하면 어떻게 될까요?
경우에 따라 연산의 손실이 일어날 수 있습니다.
1) 실수형 데이터를 정수에 저장하는 경우
#include <stdio.h>
int main()
{
float val = 3.141592f;
int n = val;
printf("%d\n", n);
return 0;
}
// 실행결과
// 3
2) 작은 data type에 큰 data type의 값을 저장하는 경우
#include <stdio.h>
int main()
{
int val = 500000;
char n = val;
printf("%d\n", n);
return 0;
}
// 실행결과
// overflow
위의 연산들은 어쩔 수 없는 손실입니다.
1)의 경우는 실수를 저장하는 방식과 정수를 저장하는 방식이 다르기 때문에 소수점을 저장시킬 수 없습니다.
2)의 경운 표현할 수 있는 메모리 공간이 한정되었기 때문에 표현할 수 없습니다.
위의 경우가 아닌 경우라면 data type을 동일하게 맞춘 후 연산을 하는 것이 좋습니다.
#include <stdio.h>
int main()
{
int val = 128;
char n = (char)val; // ()연산은 형 변환 연산자입니다.
printf("%d\n", n);
return 0;
}
// 실행결과
// 128
형 변환은 변수 앞에 (dataType)을 작성해서 dataType을 변경시킬 수 있습니다.
(dataType) 변수
#include <stdio.h>
int main()
{
short value = 30 + 500 + 20;
return 0;
}
기본적으로 아무 연산 표시가 없는 경우 default 연산은 int를 따라갑니다.
30, 500 ,20이 합산될 땐 int data type base로 연산됩니다.
'Langauge > C' 카테고리의 다른 글
[8장] 사용자 함수 (0) | 2021.09.27 |
---|---|
[7장] 변수의 초기화와 대입 (0) | 2021.09.26 |
[5장] 반복문 (0) | 2021.09.24 |
[4장] 조건 제어문 (0) | 2021.09.23 |
[3장] 연산자 (0) | 2021.09.22 |