首页 > 其他分享 >学习记录只大端存储和小端存储

学习记录只大端存储和小端存储

时间:2024-11-06 09:51:38浏览次数:5  
标签:小端 存储 字节 只大端 unsigned 地址 内存

大端存储和小端存储

在计算机系统中,数据在内存中的存储方式并不是唯一的。对于多字节的数据类型(如 intfloat 等),计算机可以以不同的方式在内存中存储它们。这些存储方式通常分为两种:大端存储(Big-Endian)和小端存储(Little-Endian)。了解这两种存储方式对底层编程和系统开发非常重要,尤其在涉及数据传输或跨平台开发时。本文将详细解释大端存储与小端存储。

什么是大端存储,什么是小端存储

我们从最开始的汇编语言就可以知道,数据与程序在内存里面以二进制的形式进行存储,而它们进行存储的时候我们可以知道它以什么作为单位,比如就拿我最近学的8086CPU作为例子,它可以一次性处理以下的两种尺寸的数据。

1.字节:一个字节由8个bit组成,可以存在8位寄存器中。

2.字:一个字由两个字节组成,在一个字中我们可以分成高位字节和低位字节,如下图。

在这里插入图片描述

接下来我们就来说一下什么是大端存储什么是小端存储了。

当一个多字节的数据(例如 32 位整数)被存储在内存中时,需要决定这些字节的存储顺序。

  • 大端存储(Big-Endian):数据的最高有效字节(Most Significant Byte,MSB)存储在内存的最低地址。换句话说,数值中权重最大的字节在内存中最前面。
  • 小端存储(Little-Endian):数据的最低有效字节(Least Significant Byte,LSB)存储在内存的最低地址。换句话说,数值中权重最小的字节在内存中最前面。

这里我们来解释一下里面的一些名词。

最高地址(High Address):指的是内存中地址值较大的位置。在内存的连续地址空间中,最高地址位于末尾。

最低地址(Low Address):指的是内存中地址值较小的位置。在内存的连续地址空间中,最低地址位于开始端。

最高有效字节(Most Significant Byte,MSB):可以把它看作上面16位时的高位字节。

最低有效字节(Least Significant Byte,LSB):可以把它看作上面16位的低位字节。

我们这里举个例子来说明一下,比如一个32位无符号0x12345678,它占用了四个字节

按照大端存储来看的话,内存从低地址到高地址是:0x12 0x34 0x56 0x78,高位字节0x12存储在低地址

而按照小端存储来看的话,内存从低地址到高地址的存储顺序为:0x78 0x56 0x34 0x12,高位字节0x12存储在最高地址。

大端和小端存储的优势

大端存储的优势

1.**符合人类的阅读习惯。**例如,在处理多字节数据时,直接读取的字节顺序与我们书写和阅读数字的顺序相同。这对于调试和手动分析内存内容时更为直观。

2.**网络协议一致性。**许多网络协议(如 TCP/IP)采用大端字节序。这使得在网络传输数据时,无需转换字节序,减少了潜在的兼容性问题,确保了在不同平台间的数据一致性。

3.**方便与数据结构结合。**某些数据结构(如某些图像格式、音频格式)在设计时可能采用大端存储,这使得直接读取和处理这些格式的数据时更加高效。

小端存储的优势

1.**处理效率高。**在小端存储中,低位字节存储在内存的低地址,对于一些基本的加法和运算操作,特别是在处理低位字节时,可以直接从内存中读取,不需要额外的字节序转换。这在某些情况下可以提高处理效率。

2.**硬件支持小端存储。**许多现代处理器(如 Intel 和 AMD)采用小端字节序,这使得在这些平台上开发的软件不需要进行字节序转换,能够更高效地访问和处理数据。

3.**与编程语言兼容。**一些编程语言(如 C/C++)在处理数组和指针时,可能更容易与小端存储兼容,尤其是在涉及到位操作时。

在计算机里如何检测系统是大端还是小端

在这里我们用一个简单的C语言程序来进行判断。

#include <stdio.h>
#include <stdlib.h>
int main()
{
	unsigned int x = 0x12345678;
	unsigned char* p = (unsigned char*)(&x);
	if (*p == 0x78)
	{
		printf("小端存储");
	}
	else
	{
		printf("大端存储");
	}
	return 0;
}

注意:这里的unsigned char可以用来当作一个字节所存储的内容,而不只是单纯的无符号的字符类型。

我们通过这段代码可以很轻松的得到最终的结果。

反思

unsigned char可以用来当作一个字节所存储的内容,而不只是单纯的无符号的字符类型。

我们通过这段代码可以很轻松的得到最终的结果。

反思

掌握大端存储和小端存储的概念,有助于我们在开发过程中更准确地处理数据,以及对于计算机内存有一定的了解,对于认识整个计算机体系也有一定的帮助。

标签:小端,存储,字节,只大端,unsigned,地址,内存
From: https://blog.csdn.net/sjsjsbbsbsn/article/details/143560217

相关文章

  • 科普文:软件架构Linux系列之【图解存储 IO性能优化与瓶颈分析】
    概叙科普文:软件架构Linux系列之【Linux的文件预读readahead】-CSDN博客科普文:软件架构Linux系列之【并发问题的根源:CPU缓存模型详解】-CSDN博客从上面冯诺依曼结构下的cpu、内存、外存之间的延迟就可以看出,磁盘I/O性能的发展远远滞后于CPU和内存,因而成为现代计算机系统的......
  • Windows Server 2025 Enhanced Storage 是微软在其未来版本的 Windows Server 操作系
    WindowsServer2025EnhancedStorage是微软在其未来版本的WindowsServer操作系统中引入的一项新技术或功能,旨在增强存储管理和优化存储性能。虽然在我的知识库中没有具体的“WindowsServer2025EnhancedStorage”这个专有术语的详细描述,但我可以根据类似技术的背景以及微......
  • 存储数据库的传输效率提升-ETLCloud结合HBASE
    一、大数据存储数据库--HBASEHBase,作为一个开源的分布式列存储数据库,基于Google的Bigtable设计而成,专为处理大规模结构化数据而优化。使用HBase打造大数据解决方案的好处主要包括:高可扩展性,能够处理PB级的数据;实时读取和写入能力,适合实时数据分析;灵活的模式设计,支持动态列的添加,......
  • S7-1500PLC通过存储卡清除项目数据的具体方法演示
    S7-1500PLC通过存储卡清除项目数据的具体方法演示存储卡的功能S7-1500使用SIMATIC存储卡作为程序存储器。SIMATIC存储卡主要有以下功能:1、作为CPU的装载存储区,离开存储卡CPU就无法运行。2、可以用于更新S7-1500CPU及集中式IO模块的固件版本。3、读取服务数据......
  • 大数据导论及分布式存储HadoopHDFS入门
    思维导图数据导论数据是什么?进入21世纪,我们的生活就迈入了"数据时代"作为21世纪的新青年,"数据"一词经常出现。数据无时无刻的在影响着我们的现实生活什么是数据?数据又如何影响现实生活?数据:一种可以被鉴别的对客观事件进行记录的符号。简单来说就是:对人类的行为......
  • Cisco MDS光纤存储交换机配置zone
    通过Console口进行本地登录:输入用户名admin,密码:admin(交换机登录用户名密码要记住)1、配置交换机IP地址conft     配置模式intmgmt0(进入管理口配置)ipaddress10..113.43255.255.255.0 ip地址ipdefault-gateway10.21.113.1网关end      退出copy......
  • 计算机存储单元bit。不同编程语言类型差异。
    计算机存储单元bit大部分计算机最小内存操作单元是字节,JE不同编程语言类型差异JEDRAM标准DQ位宽也经常按8bits为单位。英文字母ASCII码虽然可以优化为7位,但7不是一个计算机的好数字,按8位算是最优空间。当然,CPU也有......