大端和小端是什么?
大端存储模式:就是内存的低地址上存着数据的高位,高地址上存着数据的低位。
小端存储模式:就是内存的低地址上存数据的低位,而高地址上存数据的高位。
为什么要有大小端?
在计算机系统中,规定:每个地址单元都会对应一个字节(8个bit),但是,在c语言中,除了有一个字节(8个bit)的char,也有两个字节(16个bit)的short,也有四个字节(32个bit)的long(在不同的编译器下可能不同)。对于16位或者32位的处理器,即就是大于8位的处理器,由于寄存器的宽度大于一个字节,那么就存在如何将一个多字节的变量的数据如何存放的问题——所以,就有了大小端之分。
如何测试当前机器是大端还是小端
//1.利用当前一个高类型的变量给其赋值,然后取到其低地址,查看其存储的数据。 #include<stdio.h> void CheckSystem1() { int a = 1; int num = (*(char*)&a);//&a 取出a的地址; (char*)&a 代表a变量地址的第一个字节的地址 printf("%d\n", num);//(*(char*)&a) 解引用取出第一个字节保存的内容 if (num == 1) printf("小端\n"); else printf("大端\n"); } int main() { CheckSystem1(); getchar(); return 0; } //2.联合体特性 int CheckSystem2() { union check { int num; char a;//2个变量公用一块内存空间,并且2个变量的首地址相等 }b; b.num = 1;//1存放在变量num的低位 return (b.a == 1);//当变量a=1,相当于将数据的低位存到了内存的低地址处,即小端模式 } int main() { int c = CheckSystem2(); printf("c : %d\n", c); getchar(); return 0; }