임베디드

[C언어] 자료형 : float, double, 부동소수점, 고정길이정수

히똔 2022. 4. 8. 16:01
728x90
반응형

임베디드 개발자는 자료형 float, double, 부동소수점(IEEE 754), 고정길이정수에 대해 잘 알고 있어야 한다.

 

실수 처리 방법


float 

float 를 출력할때는 %f를 이용한다.
소수점 7자리 까지 저장이 가능하다.

정밀도 비교적 낮고, 처리 속도는 빠르다.

 

double

float 를 출력할때는 %lf를 이용한다.
소수점 15자리 까지 저장이 가능하다.

정밀도 비교적 높고, 처리 속도는 느리다.

 

반올림은 다음과 같이 한다.

printf("%.3lf",a); //소수점 아래 세자리까지 출력 , 네자리에서 반올림

 

부동소수점

float 와 double은 부동소수점이라고 하는데, 이것은 근사치로 소수점을 저장하는 것이다.

이렇게 부동 소수점을 저장하는 방식은 IEEE 754 방식이다.

예를들어 float같은 경우, 다음과 같이 표현된다.

부동 소수점 float (출처 위키피디아)

정확히 0.4 값을 그대로 저장하는 것이 아니라 내부적으로 특정 연산을 통해서 실수를 저장한다.

최상위 비트를 부호비트로 쓰고, 다음 여덟칸에 정수값을 저장한다.
나머지 23칸에서 소수점을 결정짓는 수를 저장한다.

IEEE 754 방식의 자세한 동작원리는 중요치 않으므로 생략한다.

 

 

고정길이정수

임베디드 개발자는 다양한 장비를 이용하기 때문에, 고정길이정수를 이용해야한다.

정수형의 길이는 특정 크기로 명시되어있지 않다.
그렇기 때문에 같은 코드가 다른 장비에서도 똑같이 작동할 수 있도록 정수형을 선언할때 길이를 고정해주어야한다.

먼저, 헤더파일 stdint.h 를 삽입해주어야한다.

#include <stdint.h>

int8_t //char (1Byte)
int16_t //short (2Byte)
int32_t //int (4Byte)
int64_t //long long (8Byte)

uint8_t //unsigned char (1Byte)
uint16_t //unsigned short (2Byte)
uint32_t //unsigned int (4Byte)
uint64_t //unsigned long long (8Byte)

시스템마다 동일한 크기의 변수를 사용하기 위해 이런 자료형을 사용한다.

unsigned 키워드는 타이핑이 길고, 가독성이 떨어지므로 위와 같이 사용한다.

 

728x90
반응형