double类型解析

来源:互联网 发布:现实有多残酷知乎 编辑:程序博客网 时间:2024/06/14 11:08

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 0
原创粉丝点击