精华内容
下载资源
问答
  • 大小端

    千次阅读 2018-11-06 09:17:35
    1. 大小端是啥 大端存储模式:数据的低位保存在内存的高地址中,数据的高位,保存在内存的低地址中。 小端存储模式:数据的低位保存在内存的低地址中,数据的高位,保存在内存的高地址中。 总结:大大大,小小小...

    大端小端

    1. 大小端是啥

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

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

    总结:大大大,小小小(忍不住1234567)。

    2. 为什么会有大小端之分

    举个例子:

    30个人,问问他们吃煮鸡蛋是从大头砸还是从小头砸或者是中间,反转我们宿舍6个人不都一样。科学家们也一样,关于数据在内存里先存大的还是先存小的,也有争议。

    大端小端没有谁优谁劣,各自优势便是对方劣势:

    小端模式 :强制转换数据不需要调整字节内容,1、2、4字节的存储方式一样。
    大端模式 :符号位的判定固定为第一个字节,容易判断正负。

    在计算机系统中,我们是以字节为单位的,每个地址单元都对应着一个字节,一个字节为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处理器还可以由硬件来选择是大端模式还是小端模式。

    3. 如何看自己的电脑是大端小端

    1. 定义一个变量int a = 1234;然后看这个变量在内存中的存储方式。

    2. 百度2015年系统工程师笔试题:

      #include <stdio.h>
      
      int check1()
      {
          int i = 1;
          return (*(char *)&i);
      }
      
      int check2()
      {
          union
          {
              int i;
              char c;
          }un;
          un.i = 1;
          return un.c;
      }
      
      int main()
      {
          if(check1())
          {
              printf("小端\n");
          }
          else
          {
              printf("大端\n");
          }
          return 0;
      }
      

    EOF,如有不足,请指正。

    展开全文
  • 数据在计算机中存储的时候,分为大端存储和小端存储,每个计算机的大小端存储都不同,为了了解自己的机器中的大小端类型,可以通过很多方法查看。这里我们主要讲解两种查看大小端的方法。 那么到底什么是大小端呢?...

    数据在计算机中存储的时候,分为大端存储和小端存储,每个计算机的大小端存储都不同,为了了解自己的机器中的大小端类型,可以通过很多方法查看。这里我们主要讲解两种查看大小端的方法。

    那么到底什么是大小端呢?

           大端存储是  数据的低位存储在高地址处

           小端存储是  数据的低位存储在低地址处

     我个人在理解的时候,将大小端的存储理解为数据在存储的时候,可以分为从内存的 低到高 存储和从 高到低 存储,也可以理解为从内存的头部开始存储和从尾巴开始存储,这样就可以理解了吧。从头开始存储是小端存储,从尾巴开始存储是大端存储。

           我们查看大小端存储的时候,可以通过编译器的内存监视功能进行查看,这是最简单的一种方法,也是我今天的第一种方法,

           这里我们插入一段代码,然后再打开编译器的内存监视窗口,查看存储状况。

    #include<stdio.h>
     
    int main()
    {
        int  a=1;
        return 0;
    }

    从上面的两张图片中,可以看出我的这个机器是小端存储,因为a=1在内存中存储时是将1放在低地址处,所以显而易见是小端存储。

           另一种查看大小端存储的的方式是通过union数据类型和数组的存储特点,进行大小端的查看。

    #include<stdio.h>
     
    int main()
     
    {
        union stduent
        {
         short a1;
         char a2[2];
        }stu;
        
        stu.a1 = 1;    
        printf("%d\n", stu.a2[0]);
        
        system("pause");
        return 0;
    }

           结果是1,是小端存储,那么我来解释一下为什么会出现1,以及为什么小端存储时,会出现1。

     数组在内存中的存储特点是从低地址开始存储,读取的时候也是从低到高。而我们在将 a1 赋值为1时,因为short 类型在存储的时候,是根据大小端进行存储,数据可能是低位存储在高地址处,或者低位存储在地址值存。当我们将联合体中一个成员修改后,也会影响到其他成员,根据这几个特点,我们读取数组的第一个元素,如果读取的结果是1,那么就是小端存储,如果是0,那就是大端存储。

           以上便是机器大小端检测的两种方法,其实还有很多方法查看,但较为常用的也就这两种了,如果不懂我在文章中的意思,可以私信给我。

    转自:https://zhuanlan.zhihu.com/p/267226738

    • 大端模式:是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中
    • 小端模式,是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中

    1.2 特点
    为什么截然相反的大小端存储模式能够并存至今?在标准化备受推崇的今天,为什么大小端谁都没有被另外一个所同化?我想这除了历史的惯性使然,还与它们各自的优缺点有关。
    大端模式优点:符号位在所表示的数据的内存的第一个字节中,便于快速判断数据的正负和大小
    小端模式优点:1. 内存的低地址处存放低字节,所以在强制转换数据时不需要调整字节的内容(注解:比如把int的4字节强制转换成short的2字节时,就直接把int数据存储的前两个字节给short就行,因为其前两个字节刚好就是最低的两个字节,符合转换逻辑); 2. CPU做数值运算时从内存中依顺序依次从低位到高位取数据进行运算,直到最后刷新最高位的符号位,这样的运算方式会更高效
    其各自的优点就是对方的缺点,正因为两者彼此不分伯仲,再加上一些硬件厂商的坚持(见1.3节),因此在多字节存储顺序上始终没有一个统一的标准
    1.3 现状

    • Intel的80×86系列芯片使用小端存储模式
    • ARM芯片默认采用小端,但可以切换为大端
    • MIPS芯片采用大端,但可以在大小端之间切换
    • 在网络上传输的数据普遍采用的都是大端

     

    展开全文

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 16,846
精华内容 6,738
关键字:

大小端