在内存中存储的时候,超过一个字节的数据就有存储顺序的问题了。
按照存储顺序,我们可以分为大端字节序存储和小端字节序存储。
大端相反,小端一致。
在内存里,变量被存储在栈区,内存中的高地址被优先使用,而取出一个变量时,低地址的字节被优先提取:
在VS2022调用内存窗口可知:
变量a的存储是倒着存储的,即低字节位先进入栈区的高地址位,所以我当前的编译环境是大端模式。
我们也可以通过代码来判断自己目前是大端模式还是小端模式:
只需在内存中存入一个整型1,再强制转换成字符类型char,最后进行解引用操作,这样输出的就是一个字符,因为1的二进制码为1,如果此时输出的为1,那么就是小端模式。
//#define _CRT_SECURE_NO_WARNINGS
大小端字节序和字节序判断
#include<stdio.h>
int check() {
int i = 1;//0x00000001
return (*(char*)&i);//取单个字节
}
int main()
{
int ret = check();
if (ret == 1) {
printf("小端机器");
}
else {
printf("大端机器");
}
}