我是靠谱客的博主 不安大白,这篇文章主要介绍float的内存结构,现在分享给大家,希望可以做个参考。

 float一共32位,其结构定义如下:

|-------- 31 -------|------------ 30-23 ------------ |------------ 22-0 ------------|

   符号位(sign)         指数部分(exp)                       小数部分(mag)

sign:符号位就一位,0表示正数,1表示负数

exp: 指数部分,无符号正数

mag:小数部分,定点小数,小数点在最左边。

float的表达式 :  pow(-1,sign)  *  (1+mag)  * pow(2,exp-127)

 

示例程序:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <stdio.h> #include <stdlib.h> #include <math.h> int main(int argc,char *argv[]) { float f; int i; int sign; int exp; int mag; float d_mag; float f2; sscanf(argv[1],"%f",&f); //f=-0.12; i = *(int*)&f; sign = (i>>31)&0x01; exp = (i>>23)&0xFF; mag = i&0x7FFFFF; d_mag = 1.0f*mag/0x800000; f2 = (sign==0?1:-1)*(1+d_mag)*pow(2,exp-127); printf("float:f=%fn",f); printf("sign=%X,exp=%X,mag=%Xn",sign,exp,mag); printf("float:f2=%fn",f2); return 0; }

 

参考文献:http://en.wikipedia.org/wiki/IEEE_754-1985
 

 

最后

以上就是不安大白最近收集整理的关于float的内存结构的全部内容,更多相关float内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(61)

评论列表共有 0 条评论

立即
投稿
返回
顶部