大端序与小端序( 基本的浅见知识 )

2023-11-21 04:48

本文主要是介绍大端序与小端序( 基本的浅见知识 ),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

    偶然看到大端序与小端序的知识,感觉还是很好玩的,呵呵~  ~  ~

   

    其实 大小端序是针对于不同的硬件而言的,具体的就是不同的CPU 是不同的处理的。 对于 Intel x86 系列就是小端序。

 

   下面具体介绍:

 

    简单点说,就是字节的存储顺序,如果数据都是单字节的,那怎么存储无所谓了,但是对于多字节数据,比如int,double等,就要考虑存储的顺序了。注意字节序是硬件层面的东西,对于软件来说通常是透明的。再说白一点,字节序通常只和你使用的处理器架构有关,而和编程语言无关。

Big(大端序):

数据的高位字节存放在地址的低端 低位字节存放在地址高端

Little(小端序):

数据的高位字节存放在地址的高端 低位字节存放在地址低端

 

字节的高位与低位:


举个例子,int a =0x12345678 ; 那么左边12就是高位字节,右边的78就是低位字节,从左到右,由高到低,(注意,高低乃相对而言,比如56相对于78是高字节,相对于34是低字节 )


关于地址的高端与低端:
0x00000001              // 相对于下面三个是低端
0x00000002
0x00000003
0x00000004               //相对于上面三个是高端

 

字节序如何存储数据:

假设从地址 0x00000001 处开始存储十六进制数 0x52365670 

( 1.)对于大端而言:

 

                  0x00000001          // 储存52
                  0x00000002           //储存36
                  0x00000003           //储存56
                  0x00000004           //储存70

( 2.)对于小端而言:

 

                  0x00000001          // 储存70
                  0x00000002           //储存56
                  0x00000003           //储存36
                  0x00000004           //储存52

 

 

总结:大端序是按照数字的书写顺序进行存储的,而小端序是颠倒书写顺序进行存储的。


----------------------------------- 代码判断方法:-------------------------------------------------

 

bool isBig()
{
   
int a =1 ; 

    
   if( ( ( char *) &a )[3]== 1 // 标准的写法是将a[3]替换为a[sizeof( int) - 1]
    {

       return true ;

    }
   
else
    {

       return false ;

   }
}

 

打开VS的内存窗口,看一下a的存储方式,一目了然

 

大端序与小端序( <wbr>基本的浅见知识 <wbr>)
a是int,所以占四个字节,其值是00000001,存储方式如下:所以a[3]是0,不是大端序。

0x0012FE88  01         // a[0]

0x0012FE89  00         // a[1]

0x0012FE8A  00         // a[2]

0x0012FE8B  00         // a[3]

 

---->当然还有方法也是可以的:就是使用 “Union 

 

bool isBig()
{
union
{
unsigned
short a ;
char b ;
} c;

c.a
= 0x0102 ;

if (c.b == 1 )
{
return true ;
}
else
{
return false ;

这篇关于大端序与小端序( 基本的浅见知识 )的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/399899

相关文章

MySQL 中的 LIMIT 语句及基本用法

《MySQL中的LIMIT语句及基本用法》LIMIT语句用于限制查询返回的行数,常用于分页查询或取部分数据,提高查询效率,:本文主要介绍MySQL中的LIMIT语句,需要的朋友可以参考下... 目录mysql 中的 LIMIT 语句1. LIMIT 语法2. LIMIT 基本用法(1) 获取前 N 行数据(

Python Faker库基本用法详解

《PythonFaker库基本用法详解》Faker是一个非常强大的库,适用于生成各种类型的伪随机数据,可以帮助开发者在测试、数据生成、或其他需要随机数据的场景中提高效率,本文给大家介绍PythonF... 目录安装基本用法主要功能示例代码语言和地区生成多条假数据自定义字段小结Faker 是一个 python

用js控制视频播放进度基本示例代码

《用js控制视频播放进度基本示例代码》写前端的时候,很多的时候是需要支持要网页视频播放的功能,下面这篇文章主要给大家介绍了关于用js控制视频播放进度的相关资料,文中通过代码介绍的非常详细,需要的朋友可... 目录前言html部分:JavaScript部分:注意:总结前言在javascript中控制视频播放

SpringBoot整合MybatisPlus的基本应用指南

《SpringBoot整合MybatisPlus的基本应用指南》MyBatis-Plus,简称MP,是一个MyBatis的增强工具,在MyBatis的基础上只做增强不做改变,下面小编就来和大家介绍一下... 目录一、MyBATisPlus简介二、SpringBoot整合MybatisPlus1、创建数据库和

国内环境搭建私有知识问答库踩坑记录(ollama+deepseek+ragflow)

《国内环境搭建私有知识问答库踩坑记录(ollama+deepseek+ragflow)》本文给大家利用deepseek模型搭建私有知识问答库的详细步骤和遇到的问题及解决办法,感兴趣的朋友一起看看吧... 目录1. 第1步大家在安装完ollama后,需要到系统环境变量中添加两个变量2. 第3步 “在cmd中

Python中多线程和多进程的基本用法详解

《Python中多线程和多进程的基本用法详解》这篇文章介绍了Python中多线程和多进程的相关知识,包括并发编程的优势,多线程和多进程的概念、适用场景、示例代码,线程池和进程池的使用,以及如何选择合适... 目录引言一、并发编程的主要优势二、python的多线程(Threading)1. 什么是多线程?2.

MyBatis-Flex BaseMapper的接口基本用法小结

《MyBatis-FlexBaseMapper的接口基本用法小结》本文主要介绍了MyBatis-FlexBaseMapper的接口基本用法小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具... 目录MyBATis-Flex简单介绍特性基础方法INSERT① insert② insertSelec

JAVA调用Deepseek的api完成基本对话简单代码示例

《JAVA调用Deepseek的api完成基本对话简单代码示例》:本文主要介绍JAVA调用Deepseek的api完成基本对话的相关资料,文中详细讲解了如何获取DeepSeekAPI密钥、添加H... 获取API密钥首先,从DeepSeek平台获取API密钥,用于身份验证。添加HTTP客户端依赖使用Jav

C++中使用vector存储并遍历数据的基本步骤

《C++中使用vector存储并遍历数据的基本步骤》C++标准模板库(STL)提供了多种容器类型,包括顺序容器、关联容器、无序关联容器和容器适配器,每种容器都有其特定的用途和特性,:本文主要介绍C... 目录(1)容器及简要描述‌php顺序容器‌‌关联容器‌‌无序关联容器‌(基于哈希表):‌容器适配器‌:(

使用Python进行文件读写操作的基本方法

《使用Python进行文件读写操作的基本方法》今天的内容来介绍Python中进行文件读写操作的方法,这在学习Python时是必不可少的技术点,希望可以帮助到正在学习python的小伙伴,以下是Pyth... 目录一、文件读取:二、文件写入:三、文件追加:四、文件读写的二进制模式:五、使用 json 模块读写