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

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

注:
在存储器中,左边的字节地址单元低于右边的字节地址单元,字节地址单元一般由八位二进制组成(即两位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一共占___个字节的大小。(填十进制数)

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

#mermaid-svg-vZkjjc14AWZbeYLd {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-vZkjjc14AWZbeYLd .error-icon{fill:#552222;}#mermaid-svg-vZkjjc14AWZbeYLd .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-vZkjjc14AWZbeYLd .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-vZkjjc14AWZbeYLd .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-vZkjjc14AWZbeYLd .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-vZkjjc14AWZbeYLd .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-vZkjjc14AWZbeYLd .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-vZkjjc14AWZbeYLd .marker{fill:#333333;stroke:#333333;}#mermaid-svg-vZkjjc14AWZbeYLd .marker.cross{stroke:#333333;}#mermaid-svg-vZkjjc14AWZbeYLd svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-vZkjjc14AWZbeYLd .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-vZkjjc14AWZbeYLd .cluster-label text{fill:#333;}#mermaid-svg-vZkjjc14AWZbeYLd .cluster-label span{color:#333;}#mermaid-svg-vZkjjc14AWZbeYLd .label text,#mermaid-svg-vZkjjc14AWZbeYLd span{fill:#333;color:#333;}#mermaid-svg-vZkjjc14AWZbeYLd .node rect,#mermaid-svg-vZkjjc14AWZbeYLd .node circle,#mermaid-svg-vZkjjc14AWZbeYLd .node ellipse,#mermaid-svg-vZkjjc14AWZbeYLd .node polygon,#mermaid-svg-vZkjjc14AWZbeYLd .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-vZkjjc14AWZbeYLd .node .label{text-align:center;}#mermaid-svg-vZkjjc14AWZbeYLd .node.clickable{cursor:pointer;}#mermaid-svg-vZkjjc14AWZbeYLd .arrowheadPath{fill:#333333;}#mermaid-svg-vZkjjc14AWZbeYLd .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-vZkjjc14AWZbeYLd .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-vZkjjc14AWZbeYLd .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-vZkjjc14AWZbeYLd .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-vZkjjc14AWZbeYLd .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-vZkjjc14AWZbeYLd .cluster text{fill:#333;}#mermaid-svg-vZkjjc14AWZbeYLd .cluster span{color:#333;}#mermaid-svg-vZkjjc14AWZbeYLd div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-vZkjjc14AWZbeYLd :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}

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

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

  • Step2:

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

  • 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的倍数,同时结构体存储数据是按顺序存储的

大端小端存储方式详解相关推荐

  1. 大端小端存储模式详解及判断方法

    文章目录 大小端模式的概念 两种模式出现原因 两种模式的优劣 大小端的应用情景 判断机器的字节序 大小端模式的概念 当我们查看数据在内存中的存储情况时,我们经常会发现一个很奇怪的现象,什么现象呢? i ...

  2. 大端小端存储方式以及区别方法

    一.大端.小端存储区别 大端存储:低字节放在高地址,高字节放在低地址. 小端存储:高字节放在高地址,低字节放在低地址. 数据0X12345678在0X20000000地址上的存储方式: 地址 小端 大 ...

  3. IoT:大端与小端字节数据详解

    大端与小端字节数据详解 转自:https://blog.csdn.net/dosthing/article/details/80641173 前言 计算机的数据以01构成的字节存储,这就涉及数据大小端 ...

  4. 大端模式与小端模式的详解分析

    大端序与小端序 何为大端序,小端序? 简单点说,就是字节的存储顺序,如果数据都是单字节的,那怎么存储无所谓了,但是对于多字节数据,比如int,double等,就要考虑存储的顺序了.注意字节序是硬件层面 ...

  5. 小端模式和大端模式_计算机字节顺序(大端法和小端法)详解

    首先理清一下基本的概念: 1. 大多数机器使用时的8位的块(一个字节),作为可寻址的最小单位, 2. 机器级程序将内存视为非常大的字节数组(虚拟内存),内存的每个字节都由一个唯一的数字来表示(如下X的 ...

  6. C语言中低位存放,C语言 大端小端存储解析以及判断方法

    当我们在C语言中查看数据在内存中的存储时,我们经常会发现一个很奇怪的现象,什么现象呢? 例如下面这段代码 int main() { int i = 1; return 0; } 数据在内存中的存放方式 ...

  7. C语言程序设计 | 大端小端存储解析以及判断方法

    当我们在C语言中查看数据在内存中的存储时,我们经常会发现一个很奇怪的现象,什么现象呢? 例如下面这段代码 int main() {int i = 1;return 0; } 数据在内存中的存放方式似乎 ...

  8. c语言大端存储,c语言 之大端小端存储问题

    我们都知道数据在计算机中的存储是以补码形式存储的.在计算机中,如果数据的高字节内容放在高地址处,低字节内容放在低地址处,我们称它为小端字节序:相反,如果数据的高字节内容放在底地址处,低字节内容放在高地 ...

  9. 大端(Big Endian)与小端(Little Endian)详解

    大端(Big Endian)与小端(Little Endian)简介 /// 1. 你从哪里来? 端模式(Endian)的这个词出自JonathanSwift书写的<格列佛游记>.这本书根 ...

最新文章

  1. 硬盘出现坏道后的修复技巧
  2. 十篇文章速览多模态推荐系统的最新进展
  3. 越来越多动物正在灭绝,“AI+动物”能否改变这一局面?[图]
  4. 深入update语句(延伸学习)
  5. CQRS架构下Equinox开源项目分析
  6. php页面怎么去登录,php中登录后跳转回原来要访问的页面实例
  7. Oracle 11.2.0.4.0 Dataguard部署和日常维护(7) - Dataguard Flashback篇
  8. 结对编程2-单元测试
  9. c语言指向读取的字节数的指针,c - C语言中指针的大小 - SO中文参考 - www.soinside.com...
  10. 【JavaScript】新浪微博批量删除脚本
  11. 用python画满天星_Python用27行代码绘制一幅满天星
  12. 花生壳:将内网端口映射到外网
  13. qqlive播放器下载视频
  14. 985大学计算机专业学费贵吗,一本大学的学费一般是多少?5000左右够吗?985学姐告诉你!...
  15. 【阅读笔记】Mutual CRF-GNN for Few-shot Learning
  16. 高等数学学习笔记——第六十八讲——隐函数存在定理
  17. 51单片机控制二相四线步进电机
  18. WinBUGS对多元随机波动率模型:贝叶斯估计 模型比较
  19. mybatis多表查询(一对多,多对一,多对多)
  20. 解决:Conda报错InvalidArchiveError

热门文章

  1. RD client、远程桌面、smb等远程相关的使用与注意
  2. 8253计数器/定时器实验
  3. TTL反相器、OC门、TS门、推挽输出、开漏输出
  4. 验证性因子分析(CFA)全流程
  5. $refs 模拟点击
  6. 计算机功能及部件ppt,《计算机逻辑部件》PPT课件.ppt
  7. Ps中的钢笔工具和快速选择工具
  8. 判断工作日还是休息日
  9. Sentence-Transformer的使用及fine-tune教程
  10. 解决 - Adobe Acrobat/Adobe Reader 的 Windows 任务栏图标异常