文章目录
- 1. 整数在内存中的存储
- 2. 大小端字节序和字节序判断
- 3. 整数存储练习
- 3.1 练习1
- 3.2 练习2
- 3.3 练习3
- 3.4 练习4
- 3.5 练习5
- 4. 浮点数在内存中的存储
- 4.1 浮点数存的过程
- 4.2 浮点数取的过程
1. 整数在内存中的存储
- 整数的2进制表示有三种方法:原码、反码、补码
- 有符号的整数都有符号位和数值位,符号位‘0’表示正,‘1’表示负
- 整数在内存中都是以补码形式存储,原因是使用补码可以将数值位和符号位统一处理,对只有加法器的CPU来说,不需要其他硬件电路就能实现加减法
2. 大小端字节序和字节序判断
- 大端存储模式
- 指的是一个数据的低位字节的内容保存到内存的高地址处,而数据的高位字节内容则保存在内存的低地址处
- 小端存储模式
- 指的是一个数据的低位字节的内容保存到内存的低地址处,而数据的高位字节内容则保存在内存的高地址处
- 举个简单的例子
- 那么大端字节序存储呢?
这里需要注意的是,数据在内存中是以二进制进行存储的,而这里的四个字节内容11 22 33 44,是在内存中的地址中以二进制的形式进行存储
- 如何判断大小端字节序呢?
3. 整数存储练习
3.1 练习1
- 类型的作用
- 1.申请内存空间的大小
- 2.类型决定了看待内存中数据的视角
3.2 练习2
3.3 练习3
3.4 练习4
3.5 练习5
4. 浮点数在内存中的存储
4.1 浮点数存的过程
- 浮点数的类型一般是float、double、long double
- 国际标准iEEE(电气和电子工程协会)规定,任意一个二进制浮点数V可表示为:
V = (-1) ^ S * M * 2 ^ E
- M表示有效数字,且M是大于等于1的,且小于2
- (-1)^S表示符号位,S等于0表示V为正数,S等于1表示V为负数
- 2^E是指数位
什么意思呢?接下来举个例子来帮助我们理解
- 那么浮点数是如何在内存中进行存储呢???
- 对于32位的浮点数(float),最高的1位存储符号位S,接着8位存储指数E,剩下的23位存储有效数字M
- 对于64位的浮点数(double),最高的1位存储符号位S,接着11位存储指数E,剩下的52位存储有效数字M
- float E(真实值)+ 127(中间值)
- double E(真实值)+ 1023(中间值)
举个例子
4.2 浮点数取的过程
- 对于S,直接取出来即可,对于M,则是取出来前面补1
- 指数E取出有三种情况
- 指数E不全为0或不全为1
- 这时,指数E的计算值减去127(或1023),得到真实值,再将有效数字M前加上第一位的1
- 指数E全为0
- 这时,指数E等于1-127(或者1-1023)即为真实值,有效数字M不再加上前面的1,而是直接还原成0.xxxxxx的小数,这样是为了表示±0,以及接近0的无限小的数
- 指数E全为1
- 这时,如果有效数字M表示0,表示±无穷大(政府取决于符号位S)
举例