본문 바로가기

프로그래밍/C

[C언어]부동소수점으로 저장된 데이터를 정수형으로 바꾸기

반응형

안녕하세요. 세상에는 다양한 장비가 있고 그 장비중에서는 메모리안에 데이터가 부동소수점형태로 저장되어있어서, 이것을 읽기 위해서 정수형의 형태로 데이터를 변환해줘야 할 때가 있어요. 이번에는 그에 대한 프로그램을 작성해볼게요.

참고로 여기서 사용하는 부동소수점은 IEEE754(https://ko.wikipedia.org/wiki/IEEE_754)를 참조했어요

      

      출력 데이터가 16비트일 경우(혹은 상위16비트만 읽은 경우)

 

      #define DECIMAL 100  //소수점 2자리까지 보기 위해 결과값에 100을 곱해주고 소수점을 자름

      #define BIAS 127     //지수에 더해주는 값(IEEE754)

 

      out = 메모리에서 읽어온 데이터 값

      outSign=  *out & 0b1000000000000000 ? -1 : 1;      //  부호비트가 1이면 음수, 

      outExp =((*out & 0b0111111110000000)>>7)-BIAS;  //  지수비트를 구하는 코드.

      outFrac=  *out & 0b0000000001111111;                    // 가수비트를 구하는 코드.

      outTemp=pow(2,outExp)*(1+(float)outFrac/128);      // 가수에 지수를 곱하는 코드. pow함수는 제곱을 구하는 함수

      *out=outTemp*outSign*DECIMAL;                            // 부호(outsing)와 소수점(DECIMAL)을 결정하는 코드.

 

만약 32비트짜리 데이터를 읽는 경우, Sign과 Exp뒤에 0을 16개, Frac뒤에 1을 16개 추가해주시면 되요. 그리고 outTemp에서 나누는값(128)에 2의 16승을 곱하면 될거에요.

 

반응형