double类型解析

double类型存储规定:把浮点数化成小数点前只有1位的小数与2的指数的乘积的形式,存储小数点后的52位,2的指数及数的符号。

sizeof(double) // 8个字节

#include <stdio.h>
//利用共用体的特点,所有类型共用一段最大的内存空间
typedef union {
    double d;
    char byte[8];
}BIT;

int main()
{
    int i;
    BIT u;
    u.d = 10.2345;
    for(i = 0; i < 8; ++i) {
        //16进制输出
        printf("%02x ",u.byte[i]);
    }
    putchar('\n');
    return 0;
}

输出结果:
这里写图片描述
计算机数据的读写方向为从右到左,即左高右低;
所以修改为:
40 24 78 10 62 4d d2 f2

转化为二进制:
0100 0000 0010 0100 0111 1000 0001 0000 0110 0010 0100 1101 1101 0010 1111 0010

前12位为2指数:0100 0000 0010 -> 1026

后52位小数部分:0100 0111 1000 0001 0000 0110 0010 0100 1101 1101 0010 1111 0010

当指数为0时,对应二进制位0011 1111 1111 -> 1023

所以上式对应二进制指数为1026 -1023 = 3;

double型小数点前只有1位1,所以剩下的52位小数部分

0100 0111 1000 0001 0000 0110 0010 0100 1101 1101 0010 1111 0010

结果为: 1.小数部分 * 2^指数部分;

1.0100 0111 1000 0001 0000 0110 0010 0100 1101 1101 0010 1111 0010

化为10进制数为:1.279312500000000074606987254810519516468048095703125

乘以 2 ^ 3得:

10.234500000000000596855898038484

验证浮点型的近似型,所以尽量不对浮点型进行== 和!= 判断,否则可能会产生意想不到的结果。

float类型基本类似,只是有8字节变为4个字节,博客链接
float类型存储

参考资料:《程序员入门必备 狂人C》

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值