整数和浮点数在内存中存储
1 整数
整型数据的储存是以补码的形式进行存储
原码 反码 补码
对于正整数的储存,三者相同 对于负整数的储存,如下: 1 0000000 00000000 00000000 00000000
首位为符号位,其余填充数据(取反 1)
-32的储存为 : 10000000 00000000 00000000 00100000(原) 111111111 111111111 111111111 11011111 (反) 111111111 111111111 111111111 11100000 (补)
不同类型的整型数据有所差异
例如32位环境下 int 占 4个字节 32个比特位 short 2个字节 16个比特位 则在储存-32时有所差异 int 类型 为 111111111 111111111 111111111 11100000 short 类型为 111111111 11100000(首位为符号位) 其他以此类推
2 浮点数
32位 状态 下
64位 状态 类似
举例来说:
⼗进制的 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。
IEEE 754规定:
对于32位 的浮点数,最⾼的1位存储符号位S,接着的 8位 存储指数E,剩下的 23位 存储有效数字M。 对于== 64位== 的浮点数,最⾼的1位存储符号位S,接着的 11位 存储指数E,剩下的 52位 存储有效数字M。
注意
M为== size_t ==类型 M的 取值为 1.xxxxxxxxxxxxx(1 < M < 2)
IEEE 754规定:
在计算机内部保存M时,默认这个数的第⼀位总是 1,因此可以被舍去,只保存后⾯的 xxxxxx部分 。
⽐如:
保存 1.01 的时候,只保存 0 1,等到读取的时候,再把第⼀位的 1加上去。这样做的⽬的是节省 1位 有效数字。以 32位 浮点数为例,留给 M 只有 23位,将第⼀位的 1 舍去以后,等于可以保存 24位 有效数字。
3 特殊情况
M 不都为 1也 不都为 0
E全为0
这时,浮点数的指数E等于1-127(或者1-1023)即为真实值,有效数字M不再加上第⼀位的 1,⽽是还原为 0.xxxxx x的⼩数。这样做是为了表⽰±0,以及接近于0的很⼩的数字。
E全为1
这时,如果有效数字M全为0,表⽰±⽆穷⼤(正负取决于符号位s);