现在的位置: 首页 > 综合 > 正文

数值类型强制转换为数组后关于下标认识的误区

2013年01月03日 ⁄ 综合 ⁄ 共 388字 ⁄ 字号 评论关闭

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都是小排,无论什么类型,都是从低地址到高地址 ,不同的是,整数的高位时在高地址,低位时在低地址。

所以,为了无关性,在使用时尽量不要用数值的内存位置,而是用按位移动来实现不同位上的取值。 这样也可支持不同硬件的兼容性。

 

抱歉!评论已关闭.