内存存储大小端介绍

标签: c语言 存储 编译器 内存 百度面试题
7人阅读 评论(0) 收藏 举报

为什么会有大小端模式之分呢?这是因为在计算机系统中,我们是以字节为单位的,每个地址单元对应着一个字节,一个字节8bit;但是在C语言中除了8bit的char之外,还有16bit的short型,32bit的long型(要看具体的编译器),另外,对于位数大于8位的处理器,例如16位或者32位的处理器,由于寄存器宽度大于一个字节,那么必然存在一个如何将多个字节安排的问题,因此就导致了大端存储模式和小端存储模式。

*大端(存储)模式:又称大端字节序,是指数据的低字节序保存在内存的高地址中,而数据的高字节序保存在内存的低地址中。
*小端(存储)模式:又称小端字节序,是指数据的低字节序保存在内存的低地址中,而数据的高字节序保存数据的高地址中。
这里写图片描述

例:百度2015年系统工程师笔试题
请简述大端字节序和小端字节序的概念,设计一个小程序来判断当前机器的字节序。

  • 大端(存储)模式:又称大端字节序,是指数据的低字节序保存在内存的高地址中,而数据的高字节序保存在内存的低地址中。
  • 小端(存储)模式:又称小端字节序,是指数据的低字节序保存在内存的低地址中,而数据的高字节序保存数据的高地址中。
方法一:
#include<stdio.h>

int check_sys()
{
    int i = 1;
    return (*(char *)&i);//小端返回1,大端返回0
}

int main()
{
    int ret = check_sys();
    if (ret == 1)
    {
        printf("小端\n");
    }
    else
    {
        printf("大端\n");
    }
    system("pause");
    return 0;
}
方法二:
#include<stdio.h>

int check_sys()
{
    union//联合类型:共用同一块空间
    {
        int i;
        char c;
    }un;
    un.i = 1;//小端返回1,大端返回0
    return un.c;
}

int main()
{
    int ret = check_sys();
    if (ret == 1)
    {
        printf("小端\n");
    }
    else
    {
        printf("大端\n");
    }
    system("pause");
    return 0;
}

这里写图片描述

查看评论

关于大小端存储

开头讲个有关大端小端的故事:   端模式(Endian)的这个词出自Jonathan Swift书写的《格列佛游记》。这本书根据将鸡蛋敲开的方法不同将所有的人分为两类,从圆头开始将鸡蛋敲开的人被...
  • AaronIn
  • AaronIn
  • 2012年06月28日 21:27
  • 4841

关于文件、网络传输以及内存存储的大小端问题

我理解的大小端应该指的是一种存储方式,而且仅对于大于1个byte的short型,word型等变量的存储有意义。 对于一个文件来讲,在大端和小端的处理器上是没有区别的,都是按顺序排列的字节流;但当该文...
  • musicnbeer7
  • musicnbeer7
  • 2016年03月11日 17:20
  • 810

数据存储的大小端问题

为什么会有大小端模式之分呢? 这是因为在计算机系统中,我们是以字节为单位的,每个地址单元都对应着一个字节,一个字节为 8bit。但是在C语言中除了8bit的char之外,还有16bit的short型...
  • qq_35524916
  • qq_35524916
  • 2017年03月14日 19:47
  • 323

数组和大小端存储

博文出处:http://hi.baidu.com/casperkid/item/8e7b8f6d2efc910ea1cf0f8b   先来看下面一段代码 #include int main(...
  • u012802999
  • u012802999
  • 2013年12月06日 15:58
  • 448

位域,内存,大小端详解

听到好几个朋友说到去一些公司做面试,总是遇到关于大小端、位段(或者叫位域)和内存对齐的考题,然后就不知所措了。虽然我认为很多开发根本就用不到这个,但是我认为很有必要学习理解这些知识点,因为它可以让你更...
  • zrf1335348191
  • zrf1335348191
  • 2016年03月03日 11:33
  • 1382

内存的字节存储大小端问题(一)

Big-endian和little-endian是描述排列存储在计算机内存里的字节序列的术语。 Big-endian是一种大值的一端(序列中更典型值)存在前面(在最小的存储地址)的顺序。Little-...
  • suxinpingtao51
  • suxinpingtao51
  • 2013年09月18日 16:31
  • 3262

结构体位域在内存中的分布与平台大小端的关系

powerpc平台是大端的,x86是小端的,两者之间应用层开发有所不同,结构体位域在通讯协议打包解包中会用到很多,两种不同的平台之间通讯的时候,如何使两者匹配,这是个问题,本人深入研究了这个问题,看了...
  • qiuzhizhecsd
  • qiuzhizhecsd
  • 2017年07月15日 10:09
  • 938

感悟int 和unsigned int——大小端内存分配。

在学习结构体成员位段的时候,遇到了这么一道题:   又如intel的笔试题: #include      “stdafx.h”      #include         struct   ...
  • chenhuijie666
  • chenhuijie666
  • 2012年04月26日 11:24
  • 5419

ARM存储格式的“大小端”解析

ARM储存—大端格式和小端格式   所谓的大端模式,是指数据的高位,保存在内存的低地址中,而数据的低位,保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而...
  • c12345423
  • c12345423
  • 2016年10月17日 10:12
  • 1405

字节存储的大小端模式

计算机上存储数据分为两种形式:大端(big endian)——低地址存放高有效字节 小端(little endian)——低地址存放低有效字节 现在主流的CPU:intel系列的是采用的littl...
  • wangyao1052
  • wangyao1052
  • 2015年04月18日 20:32
  • 618
    个人资料
    等级:
    访问量: 74
    积分: 104
    排名: 125万+
    文章分类
    文章存档
    最新评论