union & bit field 로 float 자료형 구현

2022. 12. 30. 11:28개인공부/C++

유니온을 이용해서 처음에 배웠던 float 자료형의 원리를 다시 한번 구현해 보았다.  유니온은 크기가 같은 자료형이 있으면 데이터를 서로 다른 자료형으로 읽을 수 있다. union을  활용하면 long long 자료형을 int  자료형 2개로 구성하면 특정한 조합을 만들 수도 있고 아래의 코드처럼 비트필드와 활용하여 1bit 단위로 자료형을 만들어 float을 분석할 수 있다. 만약에 최상위 비트가 1이면 음수가 된다.

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
#include <iostream>
 
struct IEEE
{
    unsigned int Fraction: 23;            // 가수 부분
    unsigned int Exponent : 8;            // 지수 부분
    unsigned int MostSignificantBit : 1;  // 최상위 비트(음수 , 양수)
};
 
 
union Float
{
    IEEE ieee;
    float floatnum;
};
 
int main(void)
{
 
    Float num = {};
    num.floatnum = -10.55111f;
    std::cout << "\n\n             float num :" << num.floatnum << std::endl;
    std::cout << "   MostSignifican Bit: " << num.ieee.MostSignificantBit << std::endl;
    std::cout << "             Exponent: " << num.ieee.Exponent << std::endl;
    std::cout << "             Fraction: " << num.ieee.Fraction << std::endl;
 
        return 0;
}
cs

 

'개인공부 > C++' 카테고리의 다른 글

C++ Array 배열 초기화 방법  (0) 2023.01.29
C++ 난수 생성  (0) 2023.01.16
상속  (0) 2022.12.16
tree erase 구현  (0) 2022.12.15
enum class  (0) 2022.12.14