大端存储和小端存储

大端存储和小端存储

在计算机系统中,数据在内存中的存储方式并不是唯一的。对于多字节的数据类型(如 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可以用来当作一个字节所存储的内容,而不只是单纯的无符号的字符类型。

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

反思

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/908345.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【数据结构二叉树】C非递归算法实现二叉树的先序、中序、后序遍历

引言: 遍历二叉树&#xff1a;指按某条搜索路径巡访二叉树中每个结点&#xff0c;使得每个结点均被访问一次&#xff0c;而且仅被访问一次。 除了层次遍历外&#xff0c;二叉树有三个重要的遍历方法&#xff1a;先序遍历、中序遍历、后序遍历。 1、递归算法实现先序、中序、后…

【LeetCode】移除链表中等于设定值的元素、反转链表

主页&#xff1a;HABUO&#x1f341;主页&#xff1a;HABUO &#x1f31c;有时候世界虽然是假的&#xff0c;但并不缺少真心对待我们的人&#x1f31b; 1. 移除链表中设定值的元素 题目&#xff1a;给你一个链表的头节点 head 和一个整数 val &#xff0c;请你删除链表中所…

程序员日志之DNF手游1023版本活动补充

目录 传送门正文日志1、概要2、正文 传送门 SpringMVC的源码解析&#xff08;精品&#xff09; Spring6的源码解析&#xff08;精品&#xff09; SpringBoot3框架&#xff08;精品&#xff09; MyBatis框架&#xff08;精品&#xff09; MyBatis-Plus SpringDataJPA SpringClo…

macOS开发环境配置与应用开发教程

macOS开发环境配置与应用开发教程 引言 macOS是一个强大的操作系统&#xff0c;广泛应用于软件开发&#xff0c;尤其是iOS和macOS应用开发。本文将详细介绍如何配置macOS开发环境&#xff0c;并通过实例演示如何进行应用开发。希望通过这篇文章&#xff0c;帮助读者快速上手m…

提高交换网络可靠性之认识STP根桥与端口角色

转载请注明出处 该实验旨在学习如何选举根桥与识别端口角色。 1.三台交换机按要求连线&#xff0c;改名&#xff0c;分别为S1&#xff0c;S2&#xff0c;S3&#xff0c;以S1为例&#xff1a; 2.在S1上配置优先级为28672 同理&#xff0c;在交换机S2和S3上配置其优先级为32768&…

基于大数据的热门旅游景点数据分析系统的设计与实现

作者主页&#xff1a;编程千纸鹤 作者简介&#xff1a;Java领域优质创作者、CSDN博客专家 、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、多年校企合作经验&#xff0c;被多个学校常年聘为校外企业导师&#xff0c;指导学生毕业设计并参…

【大语言模型】ACL2024论文-03 MAGE: 现实环境下机器生成文本检测

【大语言模型】ACL2024论文-03 MAGE: 现实环境下机器生成文本检测 目录 文章目录 【大语言模型】ACL2024论文-03 MAGE: 现实环境下机器生成文本检测目录摘要研究背景问题与挑战如何解决核心创新点算法模型实验效果&#xff08;包含重要数据与结论&#xff09;主要参考工作后续优…

A012-基于Spring Boot的私房菜定制上门服务系统的设计与实现

摘 要 如今社会上各行各业&#xff0c;都喜欢用自己行业的专属软件工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。新技术的产生&#xff0c;往往能解决一些老技术的弊端问题。因为传统私房菜定制上门服务系统信息管理难度大&#xff0c;容错率…

ios 快捷指令扩展(Intents Extension)简单使用 swift语言

本文介绍使用Xcode15 建立快捷指令的Extension&#xff0c;并描述如何修改快捷指令的IntentHandler&#xff0c;带参数跳转主应用&#xff1b;以及展示多个选项的快捷指令弹框(配置intentdefinition文件)&#xff0c;点击选项带参数跳到主应用的方法 创建快捷指令 快捷指令是…

【MacOS实操】如何基于SSH连接远程linux服务器

MacOS上远程连接linux服务器&#xff0c;可以使用ssh命令pem秘钥文件连接。 一、准备pem秘钥文件 如果已经有pem文件&#xff0c;则跳过这一步。如果手上有ppk文件&#xff0c;那么需要先转换为pem文件。 macOS 的默认 SSH 客户端不支持 PPK 格式&#xff0c;你需要将 PPK 文…

Puppeteer点击系统:解锁百度流量点击率提升的解决案例

在数字营销领域&#xff0c;流量和搜索引擎优化&#xff08;SEO&#xff09;是提升网站可见性的关键。我开发了一个基于Puppeteer的点击系统&#xff0c;旨在自动化地提升百度流量点击率。本文将介绍这个系统如何通过模拟真实用户行为&#xff0c;优化关键词排名&#xff0c;并…

Golang | Leetcode Golang题解之第524题通过删除字母匹配到字典里最长单词

题目&#xff1a; 题解&#xff1a; func findLongestWord(s string, dictionary []string) (ans string) {m : len(s)f : make([][26]int, m1)for i : range f[m] {f[m][i] m}for i : m - 1; i > 0; i-- {f[i] f[i1]f[i][s[i]-a] i}outer:for _, t : range dictionary …

019集——获取CAD图中多个实体的包围盒(CAD—C#二次开发入门)

如下图所示&#xff0c;获取多个实体的最大包围盒&#xff0c;用红色线表示&#xff1a; 也可单独选圆的包围盒 部分代码如下&#xff1a; using Autodesk.AutoCAD.ApplicationServices; using Autodesk.AutoCAD.DatabaseServices; using Autodesk.AutoCAD.Geometry; using A…

【快速上手】pyspark 集群环境下的搭建(Yarn模式)

目录 前言&#xff1a; 一、安装步骤 安装前准备 1.第一步&#xff1a;安装python 2.第二步&#xff1a;在bigdata01上安装spark 3.第三步&#xff1a;同步bigdata01中的spark到bigdata02和03上 二、启动 三、可打开yarn界面查看任务 前言&#xff1a; 上一篇介绍的是…

sublime python出现中文乱码怎么办

一、乱码现象 利用sublime自带编译快捷方式ctrlB会出现中文乱码的情况。 print("没有循环数据!") print("完成循环!") 二、寻找原因 1、由于之前我已经安装了插件ConvertToUTF8&#xff0c;排除文本编码错误问题。 2、相同的代码在插件sublimerepl搭建的…

第三届北京国际水利科技博览会将于25年3月在国家会议中心召开

由中国农业节水和农村供水技术协会、北京水利学会、振威国际会展集团等单位联合主办的第三届北京国际水利科技博览会暨供水技术与设备展&#xff08;北京水利展&#xff09;将于2025年3月31日至4月2日在北京•国家会议中心举办&#xff01; 博览会以“新制造、新服务、新业态”…

RHCE DNS

DNS DNS1.1 DNS介绍1.2 安装bind&#xff0c;配置文件1.3 正向解析文件模板1.4 反向解析文件模板1.5 转发服务器实验1.6 解析web服务器实验1.7 区域传送克隆虚拟机 DNS 1.1 DNS介绍 DNS系统 域名系统&#xff08;DNS&#xff09;是一个分层的分布式数据库。它存储用于将Inter…

JSON交互处理

目录 一、什么是JSON 二、JSON和JavaScript对象互转 ​三、Controller返回JSON数据 3.1 使用Jackson 编写Controller 1. 一个对象 2. 多个对象 3. 输出时间对象 4. 优化&#xff1a;抽取为工具类 一、什么是JSON Json是JavaScript对象的字符串表示法&#xff0c;它用…

GeoSever发布图层(保姆姬)

发布服务的具体步骤。 1. 安装 GeoServer 下载 GeoServer 安装包&#xff1a;GeoServer 官网按照安装说明进行安装&#xff0c;可以选择 Windows、Linux 或其他平台。 2. 启动 GeoServer 启动 GeoServer 通常通过访问 http://localhost:8080/geoserver 进行。默认用户名和密…

Linux中断、软中断、MMU内存映射-深入理解

中断&#xff1a; Linux中&#xff0c;中断上半部不能嵌套&#xff0c;如果一直保存上下文&#xff0c;栈可能会溢出。中断上半部处理紧急事情&#xff0c;下半部处理非紧急事情。下半部通常通过软中断来实现。在上半部执行完后会执行下半部的软中断&#xff0c;如果囤积了A和…