1.整数在内存中的存储
2.大端字节序和小端字节序
2.1:低位字节数据何高位字节数据分别是什么?
2.2:大端字节序存储和小端字节序存储分别是什么?
当一个数据需要用多个字节的空间存储时,若低位字节的数据存储到低地址处,高位字节的数据存储到高地址处就称为小端字节序存储,相反,若低位字节的数据存储到高地址处,高位字节的数据存储到低地址处就称为大端字节序存储。
2.3:大端字节序小端字节序的应用场景
我们常用的 X86 结构是⼩端模式,而KEIL C51 则为⼤端模式。很多的ARM,DSP都为小端模式。有些ARM处理器还可以由硬件来选择是⼤端模式还是小端模式。VS2022中采用的是小端字节序存储
2.4:几道练习题
a.请简述大端字节序和小端字节序的概念,设计⼀个小程序来判断当前机器的字节序。(10分)- 百度笔试题
#include<stdio.h>
int check_sys()
{
int a = 1;
/*
a的补码(以16进制的形式展示):0x00000001
假设左边地址低,右边地址高
若采用小端字节序存储: 01000000
若采用大端字节序存储: 00000001
*/
//&a取出的是a所占的四个字节中,内存单元编号最小的字节的地址
if (*((char*)&a) == 1)//对char*类型的指针变量解引用,能访问一个字节的数据
return 1;//采用小端字节序存储
else//*((char*)&a) == 0
return 0;//采用大端字节序存储
}
int main()
{
if (check_sys() == 1)
printf("采用小端字节序存储\n");
else
printf("采用大端字节序存储\n");
return 0;
}
b.下面代码的打印结果是什么?
#include <stdio.h>
int main()
{
/*
C语言标准中并没有规定char类型是属于signed char还是unsigned char,取决于编译器
大多数编译器(如VS2022)下都是signed char
*/
char a = -1;
//-1的原码:10000000000000000000000000000001
//-1的补码:11111111111111111111111111111111
//a是char类型,只能存1个字节的数据,因此a在内存中存的值是11111111
signed char b = -1;
//同理,b在内