• [IEEE754] float가 메모리에 어떻게 저장될까?

    2022. 10. 25.

    by. 안녕진

    개인 공부 목적의 포스팅입니다. 잘못된 정보가 있다면 댓글 남겨주시면 수정하도록 하겠습니다.
    감사합니다.

     

    💡 주제 설명

    IEEE754 방식 인코딩이 어떻게 동작하는가

     


    📌 배경

    IEEE754의 비정규화/정규화 인코딩을 익히다가, 개념적으로만 이해하려니 너무 헷갈려서 실제로 메모리에 어떻게 저장되는지 확인할 수 있는 코드를 짰다.

     


    🔍 과정

    • 작성한 코드
    #include <stdio.h>
    #include <string.h>
    
    typedef union {
        float f;
        unsigned char ch[4];
    } show_float;
    
    char* get_bits(unsigned char c) {
        char* arr[16] = {
            "0000","0001","0010","0011",
            "0100","0101","0110","0111",
            "1000","1001","1010","1011",
            "1100","1101","1110","1111"
        };
    
        return arr[c];
    }
    
    int main() {
        show_float data;
        scanf("%f", &data.f);
    
        printf("%f\n", data.f);
        char dest[33] = "";
    
        for (int i = 3; i >= 0; i--) {
            strcat(dest, get_bits(data.ch[i] / 16));
            strcat(dest, get_bits(data.ch[i] % 16));
        }
        printf("%c ", dest[0]);
        for (int i = 1; i <= 8; i++) {
            printf("%c", dest[i]);
        }
        printf(" ");
        for (int i = 9; i <= 31; i++) {
            printf("%c", dest[i]);
        }
        printf("\n");
    
        return 0;
    }

     

    • 사용법
    파이썬과 함께 이용하면 정말 편하다.

     

    댓글