内存高低位存储简介

来源:互联网 发布:宏程序编程实例5个圆 编辑:程序博客网 时间:2024/05/02 13:19

不考虑数据符号位的情况下:

//判断当前CPU是低位还是高位存储union{ unsigned long int i; unsigned char s[4]; }c;c.i = 0x12345678; if( 0x12 == c.s[0] ){cout << "高位存储" << endl;}else{cout << "低位存储" << endl;}/*以0x12345678为例:Big Endian低地址                              高地址----------------------------------------->+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|   12   |   34  |   56   |   78    |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+Little Endian低地址                              高地址----------------------------------------->+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|   78   |   56  |   34   |   12    |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+*/unsigned long lVal = 0x12345678; // 左移, 去掉前两位,后面补0cout << (lVal << 8) << endl;  cout << 0x34567800 << endl;// 右移, 去掉后两位,前面补0cout << (lVal >> 8) << endl;cout << 0x00123456 << endl;//取lVal的 0x0034cout << 0x0034 << endl;cout << ((lVal<<8)>>24) << endl;   // 1. lVal << 8  =   0x34567800 // 2. 0x34567800 >> 24 = 0x34  也就等于 0x0034