|
经常接触到数据存储的一些概念,其中总是让我难以记住的就是“大端存储”和“小端存储”,今天在公交车上,突然想起这么一个记忆的规则,或许可以让我永远记住这两种存储模式的区别。
对于给定的一个数据“0x12345678”,那么它的最高字节就是“0x12”,最低字节就是“0x78”。就是我们书写的时候,左边的数据字节位要高于右边的数据。在我们的传统观念中,“以左为尊”,那不是正好说明 “左边" 为“高”、“大”、“上”?如此记忆就顺畅了。
小端存储:数据的低字节存储在低地址上。
小端存储示意
| 内存地址 |
存储数据 |
| 0x00000000 |
0x78 |
| 0x00000001 |
0x56 |
| 0x00000002 |
0x34 |
| 0x00000003 |
0x12 |
大端存储:数据的低字节存储在高地址上。
大端存储示意
| 内存地址 |
存储数据 |
| 0x00000000 |
0x12 |
| 0x00000001 |
0x34 |
| 0x00000002 |
0x56 |
| 0x00000003 |
0x78 |
对于这两种存储方式,如果联系下我们常用 “异或” 操作,就能得到一个很好的记忆规则。总结来说就是:
(1)低地址存储低字节即为小端存储;高地址存储高字节即为小端存储;
(2)低地址存储高字节即为大端存储;高地址存储低字节即为大端存储;
我们把 “低” 、“小” 认作 “0”, 把 “高”、“大” 认作 “1”,这样就可以利用 “异或” 的结果来加强记忆了。
| 低地址 |
低字节 |
小端存储 |
| 0 |
0 |
0 |
| 高地址 |
高字节 |
小端存储 |
| 1 |
1 |
0 |
低地址
|
高字节
|
大端存储 |
| 0 |
1 |
1 |
| 高地址 |
低字节 |
大端存储 |
| 1 |
0 |
1 |
看看,是不是就是 “异或” 操作的结果?这样记忆,以后就再也不担心会忘记了。
|