我们先看一下整形在内存中的存储:
int main()
{
int a = 20;
int b = -10;
system("pause");
return 0;
}
a变量在内存中的存储:
b变量在内存中的存储:
从内存监视窗口中,我们得到两个信息:
- 对于a 和b 分别存储的是补码
- 顺序是倒着存放的
什么是大小端
由图可知:
大端字节序存储:数据的低位保存在内存的高地址中,数据的高位,保存在内存的低地址中。
小端字节序存储:数据的低位保存在内存的低地址中,数据的高位保存在内存的高地址中。
设计一个程序判断当前机器的字节序
思路:取出变量的地址的第一位,如果是1,则说明是小端,否则,为大端。
int main()
{
int a = 1;
char *p = (char *)&a;
if (*p == 1)
printf("小端\n");
else
printf("大端\n");
system("pause");
return 0;
}
还可以封装为函数:
int check_sys()
{
int a = 1;
return (*(char *)&a);
}
int main()
{
int ret = check_sys();
if (ret == 1)
printf("小端\n");
else
printf("大端\n");
system("pause");
return 0;
}