数据存储的方式:字节序 (更新中)
参考: 理解字节序 - 阮一峰的网络日志 (ruanyifeng.com)
字节序(Byte Order)是指多字节数据类型在计算机内存中的存储顺序。在计算机科学中,一个整数或其他多字节的数据类型可能占用多个字节的空间。由于一个字节通常包含8位信息,因此对于16位、32位或64位的整数来说,就需要多个字节来表示。
根据不同的体系结构和设计,这些字节可以以不同的顺序存储。主要存在两种常见的字节序:
- 大端字节序:高位字节在前,低位字节在后,这是人类读写数值的方法。
- 小端字节序:低位字节在前,高位字节在后,即以计算机读写形式储存。
一、数据的存储
通常来说,当我们讨论一个数据被分为两个字节存储时,通常指的是一个16位的数据值。这个值被拆分成两个8位的字节,即高字节(Most Significant Byte, MSB)和低字节(Least Significant Byte, LSB)。
1.1 十六位数据的存储
假设我们有一个16位的数据值0x1234
,它由高位字节0x12
和低位字节0x34
组成。这个数据值在内存中的存储取决于系统的字节序:
计算机内存地址 | 0x0000 | 0x0001 |
大端序(人类) | 0x12 | 0x34 |
计算机内存地址 | 0x0000 | 0x0001 |
小端序(计算机) | 0x34 | 0x12 |
1.2 三十二位数据的存储
一个32位的数据值可以被分为四个8位字节。例如,一个32位的整数值0x12345678
可以被分解为四个字节:0x12
0x34 0x56 0x78
内存地址 | 0x0000 | 0x0001 | 0x0002 | 0x0003 |
大端序 (人类) | 0x12 | 0x34 | 0x56 | 0x78 |
内存地址 | 0x0000 | 0x0001 | 0x0002 | 0x0003 |
小端序 (计算机) | 0x78 | 0x56 | 0x34 | 0x12 |
通过上面的两个例子我们就基本可以理解大端序和小端序的概念了,至于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 ,我们会读成一千二百三十四,而不是三十四又一千二。优先读高位的数据比较适合我们日常的习惯,虽然先读低位的三十四也能让人理解,但是总是会觉得绕口。谁又没事会说我有三十四又一千两百块钱呢。叫大端序我们可以联想大就对应高,又高又大。
总结:人类喜欢先读高位数据 --- 大端序
五、应用的场景
原文地址:https://blog.csdn.net/m0_52980547/article/details/140718189
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!