float 是 32 位 浮点数
double 是 64 位 浮点数
浮点数的字节内容可以用 union 破解:
union {
float x
unsigned char s[4]
} F32
F32.x = 1.23456
for (i=0i<4i++) printf("%x",F32.s[i])
16进制1位拉4位,得 2进制内容。
union {
double y
unsigned char t[8]
} F64
F64.y = 1.23456
for (i=0i<8i++) printf("%x",F64.t[i])
16进制1位拉4位,得 2进制内容。
c语言中单精度数和双精度数的本质区别在于数据类型所占的内存字节,浮点数,在C语言中使用的是IEEE754浮点数编码,该标准规定了单精度浮点数和双精度浮点数所占的内存字节,一般单精度数占用4个字节,双精度数占用8个字节,扩展双精度数占用80个字节。IEEE754具体的标准如下:格式 长度 符号位 指数位 尾数位 有效位数 指数偏移 尾数说明
单精度 32 1 8 23 24127 有一位隐含位
双精度 64 1 11 52 53 1023 有一位隐含位
扩展双精度 80 1 15 64 64 16383 没有隐含位