개발

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

안녕진 2022. 10. 25. 14:26

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

 

💡 주제 설명

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;
}

 

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