内存的存储的最小单元是一个字节,对于多字节存储的方式一般采用低位优先.
#include <iostream>
using namespace std;
union {
int a ;
long b;
unsigned char c;
} m;
int main(){
cout << sizeof(int) << endl;
cout << sizeof(long) << endl;
cout << sizeof(char) << endl;
m.b = 0x12345678;
cout << hex<<m.a <<endl;
cout <<m.b <<endl;
cout << (int)m.c <<endl;
int a = 2220;
cout << dec << a << endl;//还原输出流,以十进制的形式输出int
return 0;
}
这里采用union 关键字来让 a b c 这三个字段共享一块内存区域,在我的测试环境上 int 和long长度都为4字节,char 为1个字节
如果我们对b进行赋值0x12345678,那么在内存块中看到的是0x78 0x56 0x34 0x12,在读取的时候a和b都为0x12345678,
而读取c的时候,系统取了内存片的前8位,也就是 0x78 0x56, 0111 1000(binary) 也就是 120(十进制)
注:16进制的12345678 转化为2进制数为 0001 0010 0011 0100 0101 0110 0111 1000