C语言共用体内整型与浮点型相互转换

#include <iostream>
using namespace std;

typedef char (*PTR_TO_ARR)[30];
typedef int (*PTR_TO_FUNC)(int, int);

typedef unsigned int uni32;
typedef unsigned char byte;

int max(int a, int b){
    return a>b ? a : b;
}
typedef union
{
    byte u8Bit[4];
    float fds;

} BYTE4_TO_FLOAT;
int main(){

    BYTE4_TO_FLOAT num;
    float dinum = 0;
    byte pcDsSource[4] = {0x4A,0,0,0};
    char *pcDataOut = NULL;

    pcDataOut = (char *)malloc(sizeof(byte)*20);

    num.u8Bit[0] = pcDsSource[3];
    num.u8Bit[1] = pcDsSource[2];
    num.u8Bit[2] = pcDsSource[1];
    num.u8Bit[3] = pcDsSource[0];

    dinum = ( float )num.fds;
    num.fds = -2.0;


    /*sprintf_s( pcDataOut, 20, pcFormat, dinum );*/
    sprintf( pcDataOut,"%-10.2f", dinum );

    system("pause");
    return 0;
}
IEEE浮点数的存放格式
对于大小为32-bit的浮点数(32-bit为单精度,64-bit浮点数为双精度,80-bit为扩展精度浮点数),1、其第31 bit为符号位,为0则表示正数,反之为复数,其读数值用s表示;
2、第30~23 bit为幂数,其读数值用e表示;
3、第22~0 bit共23 bit作为系数,视为二进制纯小数,假定该小数的十进制值为x;则按照规定,该浮点数的值用十进制表示为:
=(-1)^s *(1 + x)*2^(e - 127)
对于49E48E68来说,
1、其第31 bit为0,即s = 0
2、第30~23 bit依次为1001 0100,读成十进制就是148,即e = 148。
3、第22~0 bit均为0,也就是二进制的纯小数部分为0,即x = 0。
这样,该浮点数的十进制表示
=(-1)^s * (1 + x)* 2个(e - 127)
=(-1)^0*(1+0)* 2个(148-127)= 2097152.0
把所需要存取的浮点数和一个数组(byte u8Bit[4])构成一个联合,存取的时候用数组,使用的时候用浮点数,如下:
union myfloat
{
    byte u8Bit[4];
    float fds;
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值