임베디드 개발자로서의 좋은 습관
C언어
대입 연산자(=)는 반드시 일치 시키는것이 좋다.
int 형에 소수를 저장하는 형태를 살펴보자.
int a=3.5; printf("%d",a); //실행결과 3
데이터 누수가 발생한다. int형은 소수부분을 저장하지 않는다. 때문에 0.5의 소수부분이 날라가버린다.
하지만 double형에 int형을 저장하는것은 가능하다.
더 큰 자료형에 작은 형을 assign하는것은 문제가 없다 다만 자동 형변환이 일어난다.
강제 형변환 vs 자동 형변환
자동 형변환
자동 형변환은 더 작은 자료형에서 더큰 자료형으로 assign할때 발생.
int a=8,b=2; double b=a/b; printf("%f\n",b); //실행결과 4.000000
우리가 원하는 값은 4였을 터이지만 실제 출력값은 4.000000이 나온다.
double은 8바이트를 할당하고 지수부분에 11비트 소수부분이 52비트를 저장한다.
때문에 지수부분 4와 소수부분 52비트 즉 6바이트 0.000000 이기 때문에
소수점 밑으로 6자리를 표기한다.
강제 형변환
위와 같은 경우에서 원하는 값인 2로 표기할수도 있다.
printf("%d",(int)b); //실행결과 4
물론 강제 형변환은 포인터 에서도 많이 쓰인다.
함수 포인터, byte access 를 참고.