数据在内存中的存储

整形在内存中的存储

  • 整形数据在内存中存放的是补码
  • 在计算机系统中,数值一律用补码来表示和存储

为何使用补码

  • 使用补码,可以将符号位和数值域统一处理
  • 加法和减法可以统一处理
  • 补码与原码的相互转换,其运算过程是相同的,不需要额外的硬件电路

大小端

  • 大端:数据存高位储在低地址中,低位存储在高地址中
  • 小端:数据高位存储在高地址中,低位存储在低地址中

为何有大小端

在计算机系统中以字节为单位,每个地址单元对应一个字节,一字节为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的存储

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...),由低地址向高地址增长,注意内存泄漏
  1. 静态区(数据段):保存全局变量、static变量和常量,生命周期伴随整个程序结束
  2. 文字常量区:保存常量字符串,生命周期伴随整个程序结束
  3. 代码段:保存函数体的二进制代码(可执行代码)
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值