当我们在C语言中查看数据在内存中的存储时,我们经常会发现一个很奇怪的现象,什么现象呢?
例如下面这段代码

int main()
{int i = 1;return 0;
}


数据在内存中的存放方式似乎和我们想象的顺序不太一样,在我们的常规认知不一样,在我们的常规认知中,它的存放方式应该是00 00 00 01,那造成这个的原因是什么呢?
因为C语言在内存中存放数据时采用了两种存储模式,大端存储和小端存储。
什么是大端小端

大端存储模式:是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中。
小端存储模式:是指数据的低位保存在内存的低地址中,而数据的高位,保存在内存的高地址中。

既上图的分布方式。

为什么会有大端小端

为什么会有大小端模式之分呢?这是因为在计算机系统中,我们是以字节为单位的,每个地质单元都对应着一个字节,一个字节为8bit。但是在C语言中除了8bit的char之外,还有16bit的short型,32bit的long型(要看具体的编译器),另外,对于位数大于8位的处理器,例如16位或者32位的处理器,由于寄存器宽度大于一个字节,那么必然存在着一个如果将多个字节安排的问题。因此就导致了大端存储模式和小端存储模式。
例如一个16bit的short型x,在内存中的地址为0x0010,x的值为0x1122,那么0x11为高字节,0x22为低字节。对于大端模式,就将0x11放在低地址中,即0x0010中,0x22放在高地址中,即0x0011中。小端模式,刚好相反。我们常用的x86结构是小端模式,而KEIL C51则为大端模式。很多的ARM,DSP都为小端模式。有些ARM处理器还可以由硬件来选择大端模式还是小端模式。

那么我们该如何判断当前机器是的字节序(即是大端还是小端)
由于上图我们可以发现,在小端存储模式中最低位字节中存放的为01,大端存储模式中放的为00,于是我们可以想到通过强制转换的方法,将一个四个字节的整型数据截断为一个字节的字符型数据,即可得到这个低位的数据,再进行判断,如果为1则说明该机器为小端存储模式,如果为0则说明为大端存储模式

int main()
{int i = 1;char ch = (char)i;if (ch == 0)printf("大端存储\n");else if (ch == 1)printf("小端存储\n");return 0;}

C语言程序设计 | 大端小端存储解析以及判断方法相关推荐

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

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

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

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

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

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

  4. 大端小端存储方式详解

    大端方式:用存储器的低字节地址单元来存放数据的最高字节 小端存放:用存储器的低字节地址单元来存放数据的最低字节 注: 在存储器中,左边的字节地址单元低于右边的字节地址单元,字节地址单元一般由八位二进制 ...

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

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

  6. c语言之大端小端问题

    这就是字节序问题:数据在计算机内存中存储或者网络传输时各字节的存储顺序 通常来说就分为两种情况: 一种是大端(big-endian):高字节(高位)存放在低地址,低字节(低位)存在高地址 另外一种小端 ...

  7. 数据的存储,大端存储和小端小端存储

    在数据的存储中,有两种存储形式,大端存储和小端存储. 所有的数据都是在内存当中存的,而内存当中的基本单位是字节. 数据访存的基本单位是字节的话,那么一个整形变量(int)就有四个字节,那么就意味着数据 ...

  8. C语言--测试电脑存储模式(大端存储OR小端存储)

    相信大家都知道大端存储和小端存储的概念,这在平时,我们一般不用考虑,但是,在某些场合,这些概念就显得很重要,比如,在 Socket 通信时,我们的电脑是小端存储模式,可是传送数据或者消息给对方电脑时, ...

  9. 大端和小端存储模式解析

    一.大端模式和小端模式的起源 关于大端小端名词的由来,有一个有趣的故事,来自于Jonathan Swift的<格利佛游记>:Lilliput和Blefuscu这两个强国在过去的36个月中一 ...

最新文章

  1. C++继承中构造函数、析构函数调用顺序及虚析构函数
  2. Git 这样回退代码,才足够优雅
  3. 数据分析软件python 对电脑的要求-数据分析5大软件PK,你最爱哪个?
  4. leetcode算法题--最长的斐波那契子序列的长度
  5. 关于位运算的错误问题
  6. 将单向链表按某值分成左边小、中间相等、右边大的形式
  7. 项目实战-微信扫码登录
  8. linux nginx大量TIME_WAIT的解决办法--转
  9. 反思网络中的观点:太过杂乱 需要很强的甄别能力
  10. Java DES 加解密(DES/CBC/PKCS5Padding)
  11. C++/OpenCV:error C4996: ‘fopen‘: This function or variable may be unsafe.
  12. 实战java虚拟机 百度云_《实战JAVA虚拟机 JVM故障诊断与性能优化》pdf百度云下载...
  13. tomcat的url-pattern的源码分析
  14. 五步制定企业的使命、愿景和价值观
  15. 简述计算机无法开机时故障处理方法,主板出问题了怎么办?电脑主板常见问题与故障处理方法...
  16. 多伦多大学朱子宁:一种选择语言探针的信息论观点
  17. 项目临时变更时,项目经理应该如何应对?
  18. heartbeat: ha.cf配置文件中文详解
  19. 灾难拯救——让软件项目重回轨道
  20. linux如何开启screen窗口,如何使用 Linux screen

热门文章

  1. 基本的SQL-SELECT语句
  2. java中的equals拿什么鞋的_Java中==和equals方法
  3. webflux系列--reactor功能
  4. python关闭文件os_如何关闭使用os.startfile(),Python 3.6打开的文件
  5. python集合属性方法运算_python对象及运算 序列小结 集合
  6. liunxC下零碎知识点的总结
  7. vue axios 返回参数 响应参数
  8. JavaScript实现省市二级联动
  9. mogodbshell中数组对象查询修改方法
  10. JavaScript 身份证号有效验证详解及实例代码