数据存储的方式:字节序 (更新中)

参考: 理解字节序 - 阮一峰的网络日志 (ruanyifeng.com)

        字节序(Byte Order)是指多字节数据类型在计算机内存中的存储顺序。在计算机科学中,一个整数或其他多字节的数据类型可能占用多个字节的空间。由于一个字节通常包含8位信息,因此对于16位、32位或64位的整数来说,就需要多个字节来表示。

根据不同的体系结构和设计,这些字节可以以不同的顺序存储。主要存在两种常见的字节序:

  • 大端字节序:高位字节在前,低位字节在后,这是人类读写数值的方法。
  • 小端字节序:低位字节在前,高位字节在后,即以计算机读写形式储存。

一、数据的存储

        通常来说,当我们讨论一个数据被分为两个字节存储时,通常指的是一个16位的数据值。这个值被拆分成两个8位的字节,即高字节(Most Significant Byte, MSB)和低字节(Least Significant Byte, LSB)。

1.1 十六位数据的存储

        假设我们有一个16位的数据值0x1234,它由高位字节0x12和低位字节0x34组成。这个数据值在内存中的存储取决于系统的字节序:

计算机内存地址0x00000x0001
大端序(人类)0x120x34
计算机内存地址0x00000x0001
小端序(计算机)0x340x12

 1.2 三十二位数据的存储

        一个32位的数据值可以被分为四个8位字节。例如,一个32位的整数值0x12345678可以被分解为四个字节:0x12     0x34  0x56   0x78

内存地址0x00000x00010x00020x0003

大端序

(人类)

0x120x340x560x78
内存地址0x00000x00010x00020x0003

小端序

(计算机)

0x780x560x340x12

        通过上面的两个例子我们就基本可以理解大端序和小端序的概念了,至于64位的数据以此类推即可, 将一个64位的数据值可以被分为八个8位字节,两个字节为一组放入计算机中进行存储。

二、小端序(Little Endian)

        定义:在小端序中,最低有效字节(Least Significant Byte, LSB)被存放在内存的最低地址处,而最高有效字节(Most Significant Byte, MSB)则被存放在内存的最高地址处。

         举例来说,如果一个16位的整数0x1234在小端序机器上存储,则0x34会被存放在较低的地址位置,而0x12会被存放在较高的地址位置。

三、大端序(Big Endian)

        定义:在大端序中,最高有效字节(MSB)被存放在内存的最低地址处,而最低有效字节(LSB)则被存放在内存的最高地址处。

        以同样的16位整数0x1234为例,在大端序机器上存储时,0x12会被存放在较低的地址位置,而0x34会被存放在较高的地址位置。

四、为什么要分字节序? 

        之所以要分字节序是因为小端序(计算机)更适合计算机内部处理器的操作。例如,当处理器执行加法运算时,低位字节优先被处理,然后再向上进位。因此,将低位字节放在较低的内存地址可以让处理器更容易地访问它们。叫小端序我们可以联想小就对应低,又低又小。

        总结:计算机优先处理低位数据  --- 小端序

        而大端序更有利于我们自己进行阅读,比如换成十进制是 1234 ,我们会读成一千二百三十四,而不是三十四又一千二。优先读高位的数据比较适合我们日常的习惯,虽然先读低位的三十四也能让人理解,但是总是会觉得绕口。谁又没事会说我有三十四又一千两百块钱呢。叫大端序我们可以联想大就对应高,又高又大。

        总结:人类喜欢先读高位数据 --- 大端序

五、应用的场景

  • 13
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值