一、大小端定义

研究变量的高低字节:从左往右看,字节序递增,也就是最右边是最低字节,最右边是最高字节。如 int i = 0x01020304, 01是高字节,04是低字节。如果是字符串如char a[10] ="hello",h位低字节,o为高字节,这个和整型变量是相反的。

内存中的高低地址:内存地址值大的是高地址,相反小的是地地址。如,0x4000(低地址)  0x4001(高地址) .

小端存储:低字节存储在低地址处

大端存储:高字节存储在高字节处

1,小端模式:内存的低地址存数据的低位,内存的高地址存数据的高位。低低高高。
2,大端模式:内存的低位存数据的高位,内存的高地址存数据的低位。    低高高低。


int i = 0x1234567的存储形式见上图。

注意:大小端存储问题,只有变量的类型字节数大于1才有意义,因为区分大小端的时候我们是对一个数进行整体分析的。下面的例子很好的说明这点:

何为数据的小端存储?何为数据的大端存储?仅从定义上说,小端存储指的是低字节存储在低地址处,高字节存储在高字节处;大端存储,则刚好相反。定义如此简单,其实质也非常简单。假如我这样问你,int A[100]在存储器中大端存储方式是如何存的呢?不知道,你会怎么回答,反正我刚开始是认为A[99]存储在地址最低的地方,A[0]存储在最高的地址的地方。如果你跟我认为的一样,那你就大错特错了。

实际的原因还是对概念定义的对象定位不明。实际上大端存储也好,小端存储也罢,它们指的是某个多字节类型的数据比如int i=1;在内存中的存储情况。内存的编址是以字节为最小单位进行的,也就是每一个字节都有地址;但变量i,由于有四个字节,这四个字节又是以一个整体的形式出现的,所以把四个字节中的首字节地址作为变量i的地址。大端存储、小端存储指的就是四个字节的i=1在这四个字节中是怎么安排的。

用16进制来表示i,则i=0x00 00 00 01;在小端存储中01被安排在i四个字节的首字节也就是地址最小的地方;子大端存储中,01被安排在四个字节中地址最高的地方。但不管大端还是小端存储,int i都是以整体的形式出现的。这样就可以理解,不管是大端还是小端存储,A[100]都应该是A[0]地址最小,A[99]地址最大。

C语言中储存的大小端问题的更多相关文章

  1. C语言中储存类别和内存管理

    C语言中储存类别和内存管理 储存类别 C语言提供了多种储存类别供我们使用,并且对应的有对应的内存管理策略,在了解C中的储存类型前,我们先了解一下与储存类型相关的一些概念. 1. 基础概念 对象:不同于 ...

  2. C语言共用体、大小端、枚举

    1.共用体和结构体的相同和不同 (1)相同点就是操作语法几乎相同.(2)不同点是本质上的不同.struct是多个独立元素(内存空间)打包在一起:union是一个元素(内存空间)的多种不同解析方式. # ...

  3. c语言:union,大小端

    union: 不允许只用联合变量名作赋值或其它操作. 也不允许对联合变量作初始化赋值,赋值只能在程序中进行. 小端存储: 以字节为单位,低存低,高存高. 任何数据在内存中都是以二进制(1或着0)顺序存 ...

  4. C语言编写程序的大小端问题

    有时候,用C语言写程序需要知道大端模式还是小端模式,,由于寄存器大于一个字节(8bit),就会存在一个字节安排的问题,例如(16bit)的short型,(32bit)的int型,具体需要看具体的编译器 ...

  5. 大小端 Big-Endian 与 Little-Endian

    应该说没做底层开发(硬件或驱动)的人很可能不会彻底理解大小端的概念,大小端不是简单的一句“大端在前”还是“小端在前”能够概括的问题.在cpu, 内存, 操作系统, 编译选项, 文件,网络传输中均有大小 ...

  6. C语言中的位域、字节序、比特序、大小端

    转:http://www.360doc.com/content/13/0624/10/496343_295125641.shtml 1.比特序 / 位序 /  bit numbering / bit  ...

  7. 计算机中的大小端模式及C语言中如何鉴别他们

    我的博客:www.while0.com 参考http://blog.csdn.net/ce123_zhouwei/article/details/6971544 写的很详细. 大小端主要是对数字类型来 ...

  8. C语言随笔3:指针定义、数据在地址中的大小端排列

    指针变量:用于存放另一个变量的地址 (指针变量所占空间大小由操作系统决定32/64位  4/8字节 // 声明且定义:int  *p=&a: 声明.定义:int  *p: p= &a: ...

  9. 关于C51中“大小端存储”问题的详解

    1. Little-Endian(小端存储),即将低字节的数据存储于低地址中,Big-Endian(大端存储)反之. 2. 小端存储称为Intel模式,大端存储称为Motorola模式. 3. C51 ...

随机推荐

  1. STM32定时器学习---基本定时器

    STM32F1系列的产品,除了互联网产品外,工作8个,3种定时器,其中一种就是基本定时器.那么STM32单片机的基本定时器如何操作以及编程呢? 下面我们就来详细的了解一下 STM32F1系列的产品,除 ...

  2. 排序算法:Java实现希尔排序

    希尔排序的思路是先分组再整合 先对下标进行分组,比如当数组长度为20时,一开始选定一个间隔值为10 对数组进行排序,每隔10个元素比较大小并交换,以下标为间隔,1和11比较.2和12比较......1 ...

  3. Docker 18.03 Centos7.6 安装 内网

    首先访问https://download.docker.com/linux/centos/7/x86_64/stable/Packages/获取对应版本的rpm包docker包docker-ce-18 ...

  4. 【代码更新】单细胞分析实录(21): 非负矩阵分解(NMF)的R代码实现,只需两步,啥图都有

    1. 起因 之前的代码(单细胞分析实录(17): 非负矩阵分解(NMF)代码演示)没有涉及到python语法,只有4个python命令行,就跟Linux下面的ls grep一样的.然鹅,有几个小伙伴不 ...

  5. 从0到1使用Kubernetes系列(六):数据持久化实战

    本文是从 0 到 1 使用 Kubernetes 系列第六篇,上一篇<从 0 到 1 使用 Kubernetes 系列(五):Kubernetes Scheduling>介绍了 Kuber ...

  6. Typecho 反序列化漏洞 分析及复现

    0x00 漏洞简介 CVE-2018-18753 漏洞概述: typecho 是一款非常简洁快速博客 CMS,前台 install.php 文件存在反序列化漏洞,通过构造的反序列化字符串注入可以执行任 ...

  7. CVAT 用户指南

    用户指南 计算机视觉标注工具(CVAT)是基于 Web 为计算机视觉算法标注视频和图像的在线工具. 它的灵感来自Vatic免费的.在线的.交互式的视频注释工具. CVAT有许多强大的功能: 在关键帧之 ...

  8. 集合概述&集合之List接口

    集合与数组存储概述 集合.数组都是对多个数据进行存储操作的结构,简称Java容器.此时的存储,主要指的是内存层面的存储,不涉及到持久化的存储(.txt,.jpg,.avi,数据库中) 数组存储的特点: ...

  9. Linux usb 5. usbip (USB Over IP) 使用实例

    文章目录 0. 简介 1. Server 配置 2. Client 配置 参考资料 0. 简介 USB Over IP 是一种应用很多的场景,目前已经有现成的解决方案 usbip.linux 和 wi ...

  10. The 'stream().forEach()' chain can be replaced with 'forEach()' (may change semantics)

    对集合操作时,因不同的写法Idea经常会提示:The 'stream().forEach()' chain can be replaced with 'forEach()' (may change s ...