一、大小端
什么是大小端?
大端(存储)模式:是指数据的低位字节内容保存在内存的高地址处,而数据的高位字节内容,保存在内存的低地址处。
小端(存储)模式: 是指数据的低位字节内容保存在内存的低地址处,而数据的高位字节内容,保存在内存的高地址处。
注:数据的低位与高位:以十进制为例,个十百千万...个位是最低位,依次从低到高
低地址与高地址:顾名思义,编号低的地址是低地址,编号高的地址是高地址
二、整数在内存中的存储
对于整形来说,数据存放内容其实存放的是补码。
源码:直接将数值按照正负数的形式翻译成二进制得到的就是源码
反码:将源码的符号位不变,其他位依次按位取反就可以得到反码
补码:反码+1得到的补码
我们调试一段代码:
int main()
{
int a=0x11223344;
return 0;
}
可以看到a中的数字是按照字节为单位,倒着存储的,这种就是小端(存储)模式,我们常用的x86就是小端(存储)模式。
三、浮点数在内存中的存储
根据国际标准IEEE 754,任意一个二进制浮点数V可以表示成下面的形式:
V = (-1)^s×M×2^E 。
(-1)^s 表示符号位,当s=0,V为正数;当s=1,V为负数;
M表示有效数字, 大于等于1,小于2 ;
2^E 表示指数。
例如:5.0,写成二进制是101.0,相当于1.01*2^2,按照V的格式,可以得出S=0,M=1.01,E=2
浮点数的存储,其实存储的就是S、M、E的相关值。
IEEE 754规定:
对于32位浮点数(float类型),最高的1位存储符号位S,接着的8位存储指数E,剩下的23位存储有效数字M
对于64位的浮点数 (double类型),最高的1位存储符号S,接着的11位存储指数E,剩下的52位存储有效数字M
IEEE 754对有效数字M和指数E,还有一些特别规定:
1.前面说过,1<=M<=2,也就是说M可以写成1.xxxxxxx的形式,其中xxxxx表示小数部分。
在IEEE 754规定,在计算机内部保存M时,默认这个数的第一位总是1,因此可以被舍去,只保存后面xxxxxx部分。等到读取的时候再把第一位加上去,这样做可以节省1位有效数字。
2.对于指数E,由于E是一个无符号整数,意味着如果E为8位,它的取值范围0-255;如果E为11位,它的取值范围是0-2047。科学计数法中的E是可以出现负数的,IEEE 754规定,存入E的真实值时必须加上一个中间数,对于8位的E,这个中间数是127,对于11位的E,这个中间数是1023。
例如:2^10的E是10,所以保存32位浮点数时,必须保存成10+127=137,即10001001
对于整数、浮点数的存储就介绍到这里啦,希望大家有所收获!