union是C语言中的一个关键字,数据在内存中的操作是使用补码进行加减操作。int类型占4个字节长度,即32位,char类型占1个字节长度,即8位。
80X86一般意味着小端存储和32位操作系统
union中的所有数据成员共用一个空间,同一时间只能存储其中的一个数据成员,并且所有的数据成员有相同的起始地址。例如:
union U
{
double d;
int i;
char c;
float f;
}u;
它的大小是其中最大长度double类型的大小,是8个字节。
大端(Big_endian)字数据的高字节存储在低地址中,字数据的低字节存储在高地址中。
小端(Little_endian)字数据的高字节存储在高地址中,字数据的低字节存储在低地址中。
大端字节序 :网络字节序
小端字节序 :主机字节序,我们的电脑X86都是小端字节序
很多的ARM,DSP都为小端模式。有些ARM处理器还可以随时在程序中(在ARM Cortex 系列使用REV、REV16、REVSH指令)进行大小端的切换。
如何判断大小端
#include <stdio.h>
#include <iostream>
using namespace std;
union {
int i = 1;
char c[sizeof(int)];
}num;
int main (void) {
if (num.c[0] == 1)
printf("小端字节序\n");
else
printf("大端字节序\n");
return 0;
}
大端高位低字节大端10*256+1 2561
小端256+10 266
就相当于一个256进制的数字,因为一个字节是8个b 2^8 = 256