大端小端 说明

1.引入

  计算机的字长一直在增长,从4位开始,经过8、16、32、64位,以后可能还会有更多的位出现。现在的计算机还都是以字节(即8个bit位)作为地址编址单元

  编程语言中有许多内置的数据类型,有整型,浮点型等。每种内置类型所占用的字节数是不相同的。

  大端小端就是指在一个内置数据类型中,数据的存放顺序,分为两种,即小端优势和大端优势。

2.概念

  大端优势:数据的高字节存储在低地址中,而字数据的低字节则存放在高地址中

  小端优势:数据的低字节存储在低地址中,而字数据的高字节则存放在高地址中(所谓的“高高低低”)

3.C代码测试大端小端

  说明:C语言内置类型int默认是分配4个字节。从输出来看高地址输出的是数据的高字节部分,所以是小端优势。

#include<stdio.h>
int main()
{
    unsigned int a=0x12345678;  //16进制数
    char *d=(char*)&a;

    printf("%x %x\n",d,*d);         //输出:22ff18 78
    printf("%x %x\n",d+1,*(d+1));   //输出:22ff19 56
    printf("%x %x\n",d+2,*(d+2));   //输出:22ff1a 34
    printf("%x %x\n",d+3,*(d+3));   //输出:22ff1b 12
    return 0;
}

4.图示

  

 5.再说明

   大端小端完全是设计的原因,不是因为有多个字节先写后写的问题。

   字长32位、64位的机器在CPU设计时,就可以使用32或64条数据线一次读或写多个字节数据。又因为可以一次读或写多个字节数据,有的RAM设计才有了地址对齐一说。

 

地址对齐:http://www.cnblogs.com/xudong-bupt/archive/2013/05/13/3076024.html

  

时间: 2024-10-26 19:41:47

大端小端 说明的相关文章

c语言-大端小端的存储问题,牵涉到数组和指针,C语言

问题描述 大端小端的存储问题,牵涉到数组和指针,C语言 #include int main() { int a[i]; printf("%x ",a); int *p=a; *p=0x12345678; return 0; } 若下面程序运行结果为bfae4d68,a[0]以大端模式如何存储,以小端模式如何存储,请用内存结构示意图表示. 有点不太了解它的内存方式 解决方案 C语言数组,指针,函数等问题 解决方案二: 我不知道他们的内存到底是如何分配的 解决方案三: 比如是一个字节,内存

大端小端对位域成员存放的影响

问题描述 大端小端对位域成员存放的影响 大端小端对位域成员存放的影响 1)低字节都存放在低地址 2)大端模式首先为字段的高bit位分配空间,小端模式首先为字段的低bit位分配空间 3)大端模式首先存放在地址的高bit位,小端模式首先存放在地址的低bit位 这几句话应该怎么理解呢? 解决方案 首先明确一下,内存区域地址是递增的. 例如: 00 01 02 03 04 05 06 07 ---------------------------->递增--> 假如 数据: 0X87654321 将它存

C/C++字节序(大端/小端)判断

C/C++大端小端判断 说的是变量的高字节.低字节在内存地址中的排放顺序. 变量的高字节放到内存的低地址中(变量的低字节放到内存的高地址中)==>大端 变量的高字节放到内存的高地址中(变量的低字节放到内存的低地址中)==>小端 例如,对于int类型变量x=0x30313233,在x86下,考虑到在内存中是按照字节为单位进行数据排布,那么会把0x30,0x31,0x32,0x33这4个值按照某种顺序(大端或者小端)进行存储:从0x30到0x33依次为变量的高字节到低字节,如果是大端字节序存储,则

C++ 大端小端

小端(高位存在高地址,低位存在低地址)\ union      {           long    Long;       char    Char[sizeof(long)];     }u;          bool    IsBigOrSmall()    //    1-小端(Intel);    0-大端(Motor)     {         u.Long    =    1;         if(    u.Char[0]    ==    1    )         

大端和小端(Big endian and Little endian)

一.大端和小端的问题 对于整型.长整型等数据类型,Big endian 认为第一个字节是最高位字节(按照从低地址到高地址的顺序存放数据的高位字节到低位字节):而 Little endian 则相反,它认为第一个字节是最低位字节(按照从低地址到高地址的顺序存放据的低位字节到高位字节). 例如,假设从内存地址 0x0000 开始有以下数据:   0x0000         0x0001       0x0002       0x0003   0x12            0x34        

C++:小端模式与强制数据类型转换

1.先从一个问题说开去 C++数据类型转换的问题 #include <iostream.h> void main() { int i=0xb62; char c; c=i; cout<<c<<endl; } 这里为什么输出的是b? 2.先检测一下我们所使用的电脑的CPU的字节序 版本一(有问题,结果无论如何都是34,不能说明34是高地址的还是低地址的) 版本二(根据 shineyan1991的留言修改后得到的,在此谢谢 shineyan1991的建议) 从上图可知,CP

vb.net 网络通信--网络字节顺序采用小端

问题描述 请问用vb.net实现网络通信是否要考虑网络字节顺序采用小端和大端.如果要考虑的话在vb.net中如何去实现.本人对通信这块小白,请各位不吝赐教. 解决方案 解决方案二: 解决方案三:一般是不需要考虑的.只有当你的通信另一方是LINUX之类的其它操作系统,采用的又是非标准协议时,才需要考虑.解决方案四:引用2楼rtdb的回复: 一般是不需要考虑的.只有当你的通信另一方是LINUX之类的其它操作系统,采用的又是非标准协议时,才需要考虑. 感谢你的回答,你说的非标准协议是指除socket(

深入理解计算机系统-之-数值存储(一)-CPU大端和小端模式详解

大端与小端 在嵌入式开发中,大端(Big-endian)和小端(Little-endian)是一个很重要的概念. MSB与LSB 最高有效位(MSB)指二进制中最高值的比特.在16比特的数字音频中,其第1个比特便对16bit的字的数值有最大的影响.例如,在十进制的15,389这一数字中,相当于万数那1行(1)的数字便对数值的影响最大.比较与之相反的"最低有效位"(LSB). LSB(Least Significant Bit),意为最低有效位:MSB(Most Significant

大端模式&amp;amp;小端模式 主机序&amp;amp;网络序

1. 主机序 不同的CPU有不同的字节序类型这些字节序是指整数在内存中保存的顺序,这个叫做主机序.最常见的有两种: 1.         Little endian:将低序字节存储在起始地址. 即小端模式 2.         Big endian:将高序字节存储在起始地址.    即大端模式 LE little-endian 最符合人的思维的字节序.地址低位存储值的低位,地址高位存储值的高位.怎么讲是最符合人的思维的字节序,是因为从人的第一观感来说低位值小,就应该放在内存地址小的地方,也即内存