1.整数
整数在内存中以二进制补码形式存储。这种存储方式对于正数和负数有所不同:
- 正数:其原码、反码和补码都相同。
- 负数:原码是将数值直接转换为二进制;反码是将原码的符号位保持不变,其他位按位取反;补码则是反码加1。
2.浮点数
2.1 存储形式
任意二进制数 V = (-1)^s * M * 2^E
- (-1)为符号位,当 s=0时是正数,s=1时是负数
- M表示有效数,且1<=M<=2
例:十进制数5.5,其二进制形式为101.1,则M=101.5
- 2^E表示指数位
注: 因为存储的是S,M,E相关值,会存在误差,所以浮点数存储有可能不是其精确值
2.2 存储过程
对于32位浮点数,其存储结构为:最高1位存储S,接着8位存储E,剩下23位存M
对于64位浮点数,其存储结构为:最高1位存储S,接着11位存储E,剩下52位存M
实际存储时,指数位E为unsigned int ,E存储时需加上中间值:
对8位的E,存储时+127
对11位的E,存储时+1023
有效数字M的小数部分可以节省1位
2.3 取出过程
1)E不全为1或不全为0: 指数E直接减去对应中间值,再给有效数M加上1
2)E全为1:表示±无穷大
3)E全为0: ±0或无穷小