long long ullID;
0xAAAABBBBCC0CDDDDLL -- 比如,数值表现
(unsigned short*)&ullID 转换成short数组后,一直认为内存是这样的:
0,1 2,3 4,5 6,7 -- char下标
0 1 2 3 -- short 的下标, 下标0即为AAAA
而实际上,并不是,而是倒着排的:
short下标为0,反而是最低位: DDDD,
char下标为0, 是DD
原理呢?
内存地址: 值空间
12008
12007
12006
12005
12004
12003
12002
12001
这个实际上是和CPU有关系的,现在一般的CPU都是小排,无论什么类型,都是从低地址到高地址 ,不同的是,整数的高位时在高地址,低位时在低地址。
所以,为了无关性,在使用时尽量不要用数值的内存位置,而是用按位移动来实现不同位上的取值。 这样也可支持不同硬件的兼容性。