目录

一、什么是大小端?

二、举列:

三、为什么有大小端模式之分呢?

四、经典笔试题:用C语言代码测试机器大小端


一、什么是大小端?

表示数据在存储器中的存放顺序
小端模式:数据的高字节,存放在高地址中。计算机读取数据的方向,是从高地址开始读取的;
大端模式:数据的高字节,存放在低地址中。计算机读取数据的方向,是从低地址开始读取的;
记忆口诀:“小端低低”
iOS都是小端模式。

二、举列:

列1:
要存放的数据:0x12345678
低字节为:0x12
高字节为:0x78

彻底弄懂什么是大小端_大端模式

小端模式计算机读取数据方向:<---

彻底弄懂什么是大小端_小端模式_02

大端模式计算机读取数据方向:--->

小端模式:
内存中存放顺序:0x12,0x34,0x56,0x78
读取数据方向:从高地址开始读取数据
读取结果:0x78,0x56,0x34,0x12

大端模式:
内存中排存放序:0x78,0x56,0x34,0x12
读取数据方向:从低地址开始读取数据
读取结果:0x78,0x56,0x34,0x12

列2:
要存放的数据:0x00000004
低字节为:0x04
高字节为:0x00

小端模式:
内存中存放顺序:0x04,0x00,0x00,0x00
读取数据方向:从高地址开始读取数据
读取结果:0x00000004

大端模式:
内存中排存放序:0x00,0x00,0x00,0x04
读取数据方向:从低地址开始读取数据
读取结果:0x00000004

三、为什么有大小端模式之分呢?

由于各硬件商,按自己的构想设计硬件,导致了硬件设计不同,工作原理也有差异。所以有的硬件采用了大端模式,有的硬件采用了小端模式。都认为各自采用的模式是更优秀;

四、经典笔试题:用C语言代码测试机器大小端

#include<stdio.h>

union myunion{
int a;
char b;
}; 

int main(void)
{
  union myunion s1;  //共用体测试
  s1.a=0x10000000;
  if(s1.b==0x10)
    puts("大端模式");
  if(s1.b==0x00)
    puts("小端模式"); 

  int a;
  a=0x10000001;     //指针测试
  char b=*((char*)(&a));
  if(b==0x10)
    puts("大端模式");
  else if(b==0x01)
    puts("小端模式"); 
  return 0;
}