简单理解大端小端

article/2025/9/24 21:57:31

大端和小端是计算机写内存的习惯。就如人类写文章时的顺序一般,现代人从左往右,古人却是竖书成行(自上而下写满一行后,再自右向左换行。);有些计算机规定从左往右写内存,有些规定从右往左写内存。
大端就是大地址在前,小端就是小地址在前

前言:大端小端的历史发展

Little-Endian和Big-Endian这两个词最早来自格列夫游记用来讽刺政党之间的观点,一个坚持从小的那一端打破鸡蛋,另一个则坚持从大的那一端打破鸡蛋,我们都知道对于做饭而言,这两个没什么区别。

计算机Intel8088使用小端方式(相较于大端而言)是因为其能够完成在第一个内存周期执行操作,后来计算机数据总线宽度与寄存器宽度一致了,也就没有这个优势了。从操作者而言,小端模式利于计算,而大端模式则更易理解。对于具体的某一位bitPos,其含权大小bitValue是如何被计算的?[1]

  • 小端 b i t V a l u e = 2 b i t P o s + 8 × b y t e P o s bitValue=2^{bitPos+8\times{bytePos}} bitValue=2bitPos+8×bytePos

对于大端模式你还得知道总的字节数量wordSize

  • 大端 b i t V a l u e = 2 b i t P o s + 8 × w o r d S i z e − b y t e P o s − 1 bitValue=2^{bitPos+8\times{wordSize-bytePos-1}} bitValue=2bitPos+8×wordSizebytePos1

大端模式,第一个字节第一个数字就是符号位,小端需要找到最后一个字节的第一个数字。简单来说,权重计算小端优于大端,因为他不需要提前知道总的字节大小

不同的计算机架构可能采用不同的字节序,这取决于CPU的设计和实现。一般来说,大端序的架构有:

  • IBM System/370及其后续机型
  • Motorola 68000系列
  • PowerPC
  • Java虚拟机

小端序的架构有:

  • Intel x86及其兼容处理器
  • ARM(默认小端序,但可以切换为大端序)
  • Intel 8051
  • Zilog Z80

还有一些架构可以支持双端序,也就是可以在运行时选择使用大端序或小端序,例如:

  • MIPS
  • ARM(可选大端序)
  • DEC Alpha
  • IA-64

一、数是按字节存储的

我们知道计算机是以字节为单位存储数据的,一个十进制数需要多少存储单元取决于其数的大小

char arr[] = { 0x12,0x34 };
std::cout << "Big Endian will be:";
std::cout << ((0x34 << 8) + 0x12) << std::endl;
std::cout << "Little Endian will be:";
std::cout << ((0x12 << 8) + 0x34)<<std::endl;
char arr2[] = { 0x34,0x12 };
std::cout<<*(uint16_t *)arr2;

地址高低是什么意思?

假设我们眼前有一张充满格子的稿纸,规定从左往右,先写下的称为低地址,后写下的是高地址,这个规定和大小端没有关系。

对于一个词“你好”,正常情况,“你”写在左边,“好”写在右边,换句话说,“你”在低位,“好”在高位;当然如果你要特立独行一下,你也可以反过来,,“好”写在左边,“你”写在右边,换句话说,“你”在低位,“好”在高位;

左边的格子右边的格子

因为这是一个有意义的词,我们在阅读到这个词时,可以明确知道表达的是问候词“你好”,至于为什么不影响阅读,可以参考这里的讨论。

假设我们将一个欠款金额写在纸上,按照默认习惯2在左侧,1在右侧。

左边的格子右边的格子
21

这时候,写的顺序就尤为重要,因为不规定书写顺序,可能回导致不同的欠款金额:

  • 从左往右正常写:21块
  • 从右往左特殊写:12块

好家伙,差了9块钱。这也就说明,书写顺序对于解读来说是必要的,不同书写顺序可能导致记录的内容有不同的解读

在计算机领域,正常写,我们称为大多数人写的方式为大端;特殊写,小部分人书写的方式为小端。

那么在实际编程中,这个规则是如何体现的呢?

我们知道计算机是以字节为单位存储数据,对于一个int型数据0x12345678(32位),必须将这个数分为四个字节写入以字节为计算机内存,顺序取决于计算机端种类。观察下面程序:

int a = 0x12345678;
char* ptr = (char *)&a;//因为char *恰好是一个字节,指针+1等于移动至下一个字节 std::cout << std::hex << (int)*ptr << std::endl;;
std::cout << std::hex << (int)*(ptr + 1) << std::endl;
std::cout << std::hex << (int)*(ptr + 2) << std::endl;
std::cout << std::hex << (int)*(ptr + 3) << std::endl;

如果是一个小端系统,那么那就应该是12 34 56 78;如果是一个大端系统,那么则为0x78 56 34 12,因为程序运行在x86,所以结果如下:

1
没错他是一个大端系统。

LSB MSB

LSB(Least Significant Bit) 权重最低的位,MSB(Most Significant Bit)权重最大的位。MSB是其实就是符号位,根据MSB所在是左端还是右端,可以很容易分出大小端:
在这里插入图片描述
MSB存在低地址中,没错他是一个内存存储方式是大端。


[1] https://stackoverflow.com/questions/4752715/why-are-both-little-and-big-endian-in-use
[2] 修改了事实错误,


http://chatgpt.dhexx.cn/article/gkvEDIu6.shtml

相关文章

java 为什么用大端_Java中的大端和小端

Java整型的字节序是() A.Little-Endian(小端) B.Big-Endian(大端) C.由运行程序的CPU决定 D.由编译程序的CPU决定 对于大小端&#xff0c;我估计肯定有很多开发人员跟我一样都没听过 由于Java是跨平台的&#xff0c;JVM为我们屏蔽了大量的底层细节和复杂性&#xff0c;导致在平…

存储模型:大端和小端

前言&#xff1a; 计算机操作系统中存储信息都是以字节为单位&#xff0c;每个地址单元对应 1 个字节。 1 个字节为 8 bits&#xff0c;对于某些32 位处理器而言&#xff0c;char类型数据占用 1 个字节的空间&#xff0c;short 占用2个字节&#xff0c;int 占用4个字节。而这…

操作系统之大端小端

1. 什么是大端,什么是小端: 所谓的大端模式&#xff0c;是指数据的低位保存在内存的高地址中&#xff0c;而数据的高位&#xff0c;保存在内存的低地址中&#xff1b; 所谓的小端模式&#xff0c;是指数据的低位保存在内存的低地址中&#xff0c;而数据的高位保存在内存的高地…

二进制、16进制、大端小端

16进制的使用 在开发过程中&#xff0c;写文件是常有的事&#xff0c;如果写的内容是文本&#xff0c;随便用一个记事本软件打开即可查看内容是否正确&#xff0c;如果写的是音频文件&#xff0c;就要用音频播放器来查看&#xff0c;如果是视频文件&#xff0c;就要用视频播放…

网络传输大端序_大端、小端与网络字节序

大端(Big-Endian)&#xff0c;小端(Little-Endian)以及网络字节序的概念在编程中经常会遇到。网络字节序(Network Byte Order)一般是指大端(Big-Endian&#xff0c;对大部分网络传输协议而言)传输&#xff0c;大端小端的概念是面向多字节数据类型的存储方式定义的&#xff0c;小…

677-大端模式和小端模式详解

1、大端和小端核心是什么&#xff1f; 大端模式和小端是实际的字节顺序和存储的地址顺序对应关系的两种模式&#xff0c;总结如下&#xff1a; 大端模式&#xff1a;低地址对应高字节 小端模式&#xff1a;低地址对应低字节 不管是大端还是小端模式&#xff0c;我们在读取和存…

大端小端详解

转载&#xff1a;大端小端详解 1>"大端" "小端"的来源 关于大端小端名词的由来&#xff0c;网传有一个有趣的故事&#xff0c;可以追溯到1726年的Jonathan Swift的《格列佛游记》&#xff0c;其中一篇讲到有两个国家因为吃鸡蛋究竟是先打破较大的一端…

大端序发送数据

需要发送数字 151510 大端序发送就是 &#xff1a;00 02 4F D6 string smallData textBox1.Text;//小端数据if (smallData ""){MessageBox.Show("请输入初始里程", "错误",MessageBoxButtons.OK, MessageBoxIcon.Exclamation);textBox1.Text …

c语言之大端小端问题

这就是字节序问题&#xff1a;数据在计算机内存中存储或者网络传输时各字节的存储顺序 通常来说就分为两种情况&#xff1a; 一种是大端(big-endian)&#xff1a;高字节(高位)存放在低地址&#xff0c;低字节(低位)存在高地址 另外一种小端(little-endian)&#xff1a;高位存放…

数据存储:大端小端

文章目录 问题起源大端小端大端小端优劣符合人类阅读方式数据类型转换符号位的识别 参考资料 曾经辨析和了解过大端小端&#xff0c;但是到了实际应用中还是比较模糊。整理一些资料文章&#xff0c;在此记录。 问题起源 在计算机的使用以及现代很多的嵌入式设备中&#xff0c;…

大端与小端

一.大小端介绍 “大端”和“小端”表示多字节值的哪一端存储在该值的起始地址处。小端存储在起始地址处&#xff0c;即是小短字节序&#xff1b;大端存储在起始地址处&#xff0c;即是大端字节序。 大端存储模式&#xff1a;数据的低位保存在内存中的高地址中&#xff0c;数据…

大端和小端的含义及判断代码

1、概述 在计算机系统中&#xff0c;数据都是以字节进行存储的&#xff0c;每个地址单元对应一个字节&#xff0c;每个字节都是8位&#xff08;bit&#xff09;。但是C除了char和bool之外&#xff0c;还有其它多字节类型。怎样存储多字节的数据就分为了大端和小端。字节序只和…

C语言基础 —大端和小端

大端和小端 1、什么是大端和小端2、为什么会有大端和小端3、怎样判断是大端还是小端 1、什么是大端和小端 大端模式&#xff1a;就是 高位字节 存放在内存的 低地址端&#xff0c;低位字节 存放在内存的 高地址端 小端模式&#xff1a;就是 低字节存 放在内存的 低地址端&…

大端和小端的区别和判断

1.概念 大端模式(big endian)&#xff1a;数据的高位字节保存在内存的低地址中&#xff0c;而低位字节保存在内存的高地址中。 小端模式(little endian)&#xff1a;数据的高位字节保存在内存的高地址中&#xff0c;而低位字节保存在内存的低地址中。 问&#xff1a;什么是高…

什么是大端和小端

大端&#xff08;存储&#xff09;模式&#xff1a;是指数据的低位保存在内存的高地址中&#xff0c;而数据的高位保存在低地址中&#xff1b; 小端&#xff08;存储&#xff09;模式&#xff1a;是指数据的低位保存在内存的低地址中&#xff0c;而数据的高位保存在高地址中。 …

大端、小端的前世今生

什么是大端、小端&#xff1f; BigEndian(大端)&#xff1a;低字节在高内存地址 LittleEndian(小端)&#xff1a;低字节在低内存地址 所谓大端小端&#xff0c;也就是看低字节在高内存地址还是低内存地址&#xff0c;也就是看低字节在前还是高字节在前&#xff0c;低字节在前…

数据存储:小端模式和大端模式——终于搞明白了!!!

首先要记住&#xff1a;读数据永远是从低地址开始的&#xff01;&#xff01;&#xff01; 正文开始 什么是低地址、高地址&#xff1f; 地址编号小的是低地址&#xff0c;地址编号大的是高地址 什么是数据的低位、高位&#xff1f; 小端模式 数据的低位放在低地址空间&am…

室内定位技术(三)——自有定位技术

我们正在使用的技术是以wifi信号强度正态分布为核心&#xff0c;结合神经网络原理的一套完整算法&#xff0c;并对wifi信号的正态分布情况作了很多的优化工作。 以下是在两组wifi信号强度正态分布研究的实例图&#xff1a; 四条不同颜色的线分别代表不同的ap信号强度的正态分布…

室内定位浅析

这一星期都在弄室内定位的事情&#xff0c;关于室内定位。需求就是两个终端之间&#xff0c;能够快速地通过室内定位做出路线规划&#xff0c;进行导航。 这个精确的室内定位路线规划得益于WIFI的精确部署。 先开看看这个WiFi的理论部署模型。 等边三角形的三个顶点作为三个无…

物联网之室内定位

摘要&#xff1a;室内定位正处于百家争鸣、技术爆发的阶段&#xff0c;尤其近年随着UWB、Wi-Fi以及5G等通信技术的广泛应用。 1、定位需求 物联网时代&#xff0c;位置服务已成为人们工作生活必不可少的服务之一&#xff0c;网约车、外卖、导航等都依赖定位服务。这些最常用的…