整数
整数在内存中以补码的形式存储
分类:
1.short (int) 2字节
(signed) short (int)
unsigned short (int)
2.int 4字节
(signed) int
unsigned int
3.long (int) 4字节
(signed) long (int)
unsigned long (int)
long long int 8字节
(signed) long long (int)
unsigned long long (int)
浮点数
存储形式:
对于32位的浮点数,最⾼的1位存储符号位S,接着的8位存储指数E,剩下的23位存储有效数字M
对于64位的浮点数,最⾼的1位存储符号位S,接着的11位存储指数E,剩下的52位存储有效数字M
根据国际标准IEEE(电⽓和电⼦⼯程协会)754,任意⼀个⼆进制浮点数V可以表⽰成下⾯的形式:V=(-1)^s*M*2^e
(-1)^s表示的符号位,s=0,表示整数s=1表示负数
M表示有效数字,M是⼤于等于1,⼩于2的
2^e表⽰指数位
⼗进制的5.0,写成⼆进制是 101.0 ,相当于 1.01×2^2 。 那么,按照上⾯V的格式,可以得出S=0,M=1.01,E=2。 ⼗进制的-5.0,写成⼆进制是-101.0 ,相当于-1.01×2^2 。那么,S=1,M=1.01,E=2。
M:
前⾯说过, 1≤M<2 ,也就是说,M可以写成 1.xxxxxx 的形式,其中 xxxxxx 表⽰⼩数部分。 IEEE 754规定,在计算机内部保存M时,默认这个数的第⼀位总是1,因此可以被舍去,只保存后⾯的 xxxxxx部分。⽐如保存1.01的时候,只保存01,等到读取的时候,再把第⼀位的1加上去。这样做的⽬ 的,是节省1位有效数字。以32位浮点数为例,留给M只有23位,将第⼀位的1舍去以后,等于可以保存24位有效数字。
E:
E为⼀个⽆符号整数(unsignedint)。科学计数法中的E是可以出现负数的,所以IEEE754规定,存⼊内存时E的真实值必须再加上 ⼀个中间数,对于8位的E,这个中间数是127;对于11位的E,这个中间数是1023。⽐如,2^10的E是10,所以保存成32位浮点数时,必须保存成10+127=137,即10001001。
E不全为0或不全为1 这时,浮点数就采⽤下⾯的规则表⽰,即指数E的计算值减去127(或1023),得到真实值,再将有效 数字M前加上第⼀位的1。
E全为0 这时,浮点数的指数E等于1-127(或者1-1023)即为真实值,有效数字M不再加上第⼀位的1,⽽是还原为0.xxxxxx的⼩数。
E全为1 这时,如果有效数字M全为0,表⽰±⽆穷⼤(正负取决于符号位s)
举例:
例如 -5.5,
二进制:-101.1
科学计数法:(-1)^1*1.011*2^2
s=1,m=1.011,e=2.
e+127=129(d)=10000001(b)
在内存中的存储:1 10000001 01100000000000000000000
即为:11000000101100000000000000000000
分类:
1.float 4字节
2.double 8字节
3.long double 8字节
浮点数表⽰的范围: float.h 中定义