整形在内存中的存储
- 整形数据在内存中存放的是补码
- 在计算机系统中,数值一律用补码来表示和存储
为何使用补码
- 使用补码,可以将符号位和数值域统一处理
- 加法和减法可以统一处理
- 补码与原码的相互转换,其运算过程是相同的,不需要额外的硬件电路
大小端
- 大端:数据存高位储在低地址中,低位存储在高地址中
- 小端:数据高位存储在高地址中,低位存储在低地址中
为何有大小端
在计算机系统中以字节为单位,每个地址单元对应一个字节,一字节为8bit;但是在C语言中除了8bit的char外,还有16bit的shout,32bit的long,另外对于位数大于8位的处理器,由于寄存器宽度大于一个字节,那么存在将多字节安排的问题,因此导致了大小端存储模式
浮点型在内存中的存储
浮点数表示
- 任意一个二进制浮点数V可以表示为(-1)^S*M*2^E
- (-1)^S表示符号位,当S=0时,V为正数,当S=1时,V为负数
- M表示有效数字,1<=M<2
- 2^E表示指数位
浮点数存储
M可写为1.xxxx的形式,计算机在保存时,默认M的第一位数为1,因此社区,只保存小数部分
E的存储
- E为无符号整数
- E全为0时,浮点数的指数E=1-127为真实值
- E全为1时,如果有效数字M全为0,表示±无穷大
- E不全为0或1时,浮点数的指数E-127为真实值
例
- 二进制存储为0 0000 0000 000 0000 0000 0000 0000 1001,V=(-1)^0*1.0000 0000 0000 0000 0000 0000 0000 1001*2^(-126)
- V=9.0=(-1)^0*1.001*2^3,二进制存储为0 1000 0010 001 0000 0000 0000 0000 0000
内存地址空间分布
- 栈:保存局部变量、函数参数、返回数据、返回地址等。栈空间有限,且出了作用域自动销毁(函数栈帧),由高地址向低地址增长
- 堆:动态分配的空间(malloc,free...),由低地址向高地址增长,注意内存泄漏
- 静态区(数据段):保存全局变量、static变量和常量,生命周期伴随整个程序结束
- 文字常量区:保存常量字符串,生命周期伴随整个程序结束
- 代码段:保存函数体的二进制代码(可执行代码)