不考虑数据符号位的情况下:
//判断当前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;
// 左移, 去掉前两位,后面补0
cout << (lVal << 8) << endl;
cout << 0x34567800 << endl;
// 右移, 去掉后两位,前面补0
cout << (lVal >> 8) << endl;
cout << 0x00123456 << endl;
//取lVal的 0x0034
cout << 0x0034 << endl;
cout << ((lVal<<8)>>24) << endl;
// 1. lVal << 8 = 0x34567800
// 2. 0x34567800 >> 24 = 0x34 也就等于 0x0034