大端小端存储方式详解

  • 大端方式:用存储器的低字节地址单元来存放数据的最高字节

  • 小端存放:用存储器的低字节地址单元来存放数据的最低字节

注:
在存储器中,左边的字节地址单元低于右边的字节地址单元,字节地址单元一般由八位二进制组成(即两位16进制数表示);而在数据的表示中,左边的字节高于右边的字节(数据的字节可以理解为数据转成16进制后,从右往左每相邻两位的一个组合,前面位数不够就补0)
在这里插入图片描述

实战例题:

某计算机存储器按字节编址,采用小端方式存放数据。假定编译器规定int 型、float型和 short型长度分别为32位、32 位和16 位,并且数据按边界对齐存储。某C 语言程序段如下:

struct{ 
     float a;
     char b;
     short c;
     short d;
     float e; 
     int f;
     char g[6];
     } record; 

   record.d= -0xCDAB; 
   record.e= 20.59375f;

若record变量的首地址为0xFF24,则

(1)地址0xFF2D中内容为0x___。(填十六进制数)
(2)地址0xFF33 中内容为0x___。(填十六进制数)
(3)浮点型record.e是按 IEEE754 标准编码后存放。
(4)record.g[5]的地址为0x___。(填十六进制数)
(5)结构体record一共占___个字节的大小。(填十进制数)

注意:填写答案时,如须填写英文字母一律使用大写

分配地址空间
确定所求地址位置
数据转换
根据存储方式找出相应地址内容
  • Step1:

    先按照边界对齐存储方式将所需的内存空间进行分配,如图所示:(需要熟悉基本数据类型所占字节,一个小格子代表一个字节)

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0GBliTnU-1648632190619)(C:\Users\ghp\AppData\Roaming\Typora\typora-user-images\image-20220330162156963.png)]

  • Step2:

    找到要求数据所对应的地址位置

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-F69HVlaL-1648632190620)(C:\Users\ghp\AppData\Roaming\Typora\typora-user-images\image-20220330162456879.png)]

  • Step3

    将该区域的数据采用小端存储(要先将该数据转换成补码,按16进制来存),然后观察该地址单元所对应的数据字节

    例如:

    • 0xFF2D地址所在区域是 short d 的存储位置,d= -0xCDAB 为整型真值,转成补码 [d]补:3255H 按小端方式存入,顺序为:5532;所以0xFF2D所存内容为:0x32
    • 同理可知0xFF33地址所在区域是 float e 的存储位置,将e=20.59375 为浮点数真值,通过IEEE754规范转换成16进制数为:41A4C000 按小端方式存入,顺序为:00C0A441;所以0xFF33所存内容为:0x41
  • Step4:

    要确定record.g[5]的地址,只需要一个格子一个格子的数出来即可,易知它的地址为:0xFF3D

  • Step5:

    计算出所用的单元格,(空值也需要计算,计算机是四个四个字节的读取,所以最后的两个空值也是需要计算)易知该record结构体所占字节为:28


由上面的做题我们也可以得出一个结论:
在C语言中结构体所占字节一定是4的倍数,同时结构体存储数据是按顺序存储的

  • 12
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

知识汲取者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值