上次整型在内存中的存储忘说了一个:
文章来源地址https://www.toymoban.com/news/detail-806736.html
根据数据类型不同,所占的字节数也不同。
文章来源:https://www.toymoban.com/news/detail-806736.html
所占字节多了,数据在内存中的存储顺序的问题也就出现了。
数据在内存中的存储顺序分两种:
- 大端[字节序]存储:
把一个数据的高位字节序(字节中存储的数据的位数更高的,可类比十进制的百位等高位)的内容存放在低地址处,把低位字节序(字节中存储的数据的位数更低的,可类比十进制的个位等低位)的内容放在高地址处,就是大端字节序存储。
- 小端[字节序]存储:
把一个数据的高位字节序的内容存放在高地址处,把低位字节序的内容放在低地址处,就是小端字节序存储。
例 十进制数3
它的十六进制(数据在内存中的大小一般用十六进制表示,但本质上存储还的是二进制)为
0X 00 00 00 03\n\n如果是大端存储,那它在内存中地址由低到高存储的是
0X 00 00 00 03
如果是小端存储,那它在内存中地址由低到高存储的是
0X 03 00 00 00
越靠近0x的字节序越高,因为0x越靠近0x的字节序中存储的数据的真实值要乘以16的n次方中的n越大。可以类比十进制数1022,最左端的1真实值要x10的3次方,即1不是1而是1000
是大端存储还是小端存储,取决于硬件和编译器。
那么怎么判断自己的电脑和使用编译器是大端还是小端呢?
法一:可以用指针+强制类型转换
因为p是char类型的所以*一次(解引用一次)向后访问一个字节
所以如果a中的1是小端存储,那么01就在最前面(因为int类型的1的十六进制是0X 00 00 00 01)
此时*p就==1
如果a中的1是大端存储,那么00就在最前面
此时*p就==0
法二:利用共用体的特性
因为共用体中a,b共用一个空间(a的4个字节),所以向a中存放1,再看b的值,就可以判断大小端存储了
到了这里,关于大端存储与小端存储的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!