美文网首页
彻底弄懂什么是大小端

彻底弄懂什么是大小端

作者: lockezhang78 | 来源:发表于2019-07-19 14:15 被阅读0次

一、什么是大小端?

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

二、举列:

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

截图.png

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

截图 (1).png

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

小端模式:
内存中存放顺序: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("da端模式");
  if(s1.b==0x00)
    puts("xiao端模式"); 

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

相关文章

  • 彻底弄懂什么是大小端

    一、什么是大小端? 表示数据在存储器中的存放顺序小端模式:数据的高字节,存放在高地址中。计算机读取数据的方向,是从...

  • 什么是大小端?

    一、大端模式和小端模式的起源Big-Endian和Little-Endian的定义如下: Little-Endia...

  • 这次一定彻底弄懂DOM事件机制

    这次一定彻底弄懂DOM事件机制 本文首发自JohnieXu's Blog,转载请注明出处? 前言 在网页端、移动端...

  • 2019.8.19总结

    科比自传 方法: 如果自己想掌握什么新招数,就会把它弄懂,马上付诸实践(彻底弄懂,...

  • (转) 彻底弄懂最短路径问题

    彻底弄懂最短路径问题

  • 前端基础

    这一次,彻底弄懂 JavaScript 执行机制 本文的目的就是要保证你彻底弄懂javascript的执行机制,如...

  • JavaScript文章

    这一次,彻底弄懂 JavaScript 执行机制 本文的目的就是要保证你彻底弄懂javascript的执行机制,如...

  • (重点理解)彻底弄懂怎么正确使用async/await

    彻底弄懂怎么正确使用async/await

  • 彻底弄懂AQS

    先来看看 AQS 有哪些属性 等待队列中每个线程被包装成一个 Node 实例,数据结构是链表,一起看看源码: No...

  • 大端小端问题

    为什么有大小端问题 大端 小端 解决大小端方法: 或者:

网友评论

      本文标题:彻底弄懂什么是大小端

      本文链接:https://www.haomeiwen.com/subject/kiojlctx.html