1.大端序和小端序
数据在内存中存储的字节顺序不同,其中大端序是符合平时的习惯,将数据的高字节部分存储于低地址,将低字节部分存储于高地址中.如0x11223344在内存中的实际存储情况是从某个地址开始为:11 22 33 44.而小端序则相反.
如何判断是大端序存储还是小端序存储?
可以根据大小端序存储的区别,将一个实际数据存入内存中,如a = 0x11223344,通过查看在内存中变量a起始的第一个字节的内容是11(大端序),还是44(小端序)来判断.可以通过将int指针强转成char指针,进一步获取第一个字节的内容.
int a = 0x11223344;
int *p = &a;
char *p2 = (char *)p;
printf("%x\n", *p2);//输出结果为44(为小端序存储)
2.整数类型的数据在内存中的存储
在内存中,数据的存储为补码形式。其中,分为无符号整数和有符号整数。无符号整数表示非负数,直接存储其十六进制形式。而有符号整数需要将最高位作为符号位(0正1负)。
3.整数的类型转换
整数在作表示数的范围大的类型向小范围的类型转化时,采取的是截断的方法。在作小范围向大范围的类型转换是采取的是“高位补符号位的办法”,因此在类型转换中可能导致数据的大小发生变化。
char a1 = -1;
signed char b1 = -1;
unsigned char c1 = -1;
printf("a1 = %d,b1 = %d,c1 = %d\n", a1, b1, c1);
//输出结果为 -1 -1 255
char a2 = -128;
printf("%u\n", a2);//输出为4294967168
char a3 = 128;
printf("%u\n", a3);//输出4294967168