16位cpu 移位处理

以前和一位交换机的同事看一个问题,是在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的影响 。

发布了10 篇原创文章 · 获赞 12 · 访问量 884

猜你喜欢

转载自blog.csdn.net/u012573878/article/details/104162855