浮点数在内存中的存储
浮点数在内存中的存储:
目前所有的c/c++编译器都是采用IEEE所制定的标准浮点数格式,即二进制科学表示法。
在二进制科学表示法中,S=M*2^N 主要由三部分构成:符号位+阶码(N)+尾数(M)。对于float型数据,其二进制有32位,其中符号位1位,阶码8位,尾数23位;对于double型数据,其二进制为64位,符号1位,阶码11位,尾数52位。
31 30-23 22-0 float 符号位 阶码 尾数 63 62-52 51-0 double 符号位 阶码 尾数
符号位:0表示正,1表示负
阶码采用移码表示,对于float型数据其规定偏移量为127,double数据其规定偏移量为1023,阶码有正有负。对于8为二进制,则其表示范围为 -128~127。比如对于 float 型数据,若阶码的真实值为2,则加上127后为129,其阶码表示形式为 10000010
尾数:有效数字,即部分二进制位,因为规定M的整数部分恒为1,所以这个1就不进行存储了。
#include<stdio.h> int main()
{ float f= 93.36; char *p=(char *)&f; printf("%d\n",*p); printf("%d\n",*(p+1)); printf("%d\n",*(p+2)); printf("%d\n",*(p+3)); return 0; }
输出结果:
82
-72
-70
66
由于内存中二进制是以补码存储的。