整数和浮点数在内存中的存储

整数

整数在内存中以补码的形式存储

分类:

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 中定义

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值