以前和一位交换机的同事看一个问题,是在IC+的一个16位cpu上配置突破口处理的异常的问题:
u32 tmp = 0;
tmp |= 1<<21;
打印tmp的结果为0,非常之不科学。
后面发现,修改为:
u32 tmp = 0;
u32 t = 1;
t <<= 21;
tmp|=t;
打印结果正常。
后经过分析,原因为在16位的cpu中,对于 常量 1直接存在 16bit的寄存器中, 左移21位后就越界 为0,这个结果很正常。
如果需要用到32位的数,那必须定义变量来保量,以保证结果的正确性。
同时int 、指针大小,都会受cpu的影响 。