CC2541开发中的C语言移位问题
时间:10-02
整理:3721RD
点击:
开发环境:IAR 8.10
运行芯片:CC2541
程序如下:
unsigned int a = 12, c;
c = a<<8;
.......
在使用仿真器仿真的情况下观察变量c的值在运算后变成了0,不知是什么原因,恳请高手指导。(备注:移7位或其他数值时结果正常,偏偏8位时出错)
为什么一定要用这个左移8位的运算呢?
我觉得可以尝试定义uint32再移8位看看
使用uint32位数据左移8位结果正确,我想知道这是什么原因,原理上分析没有问题啊,而且之前在别的单片机(stm32)上经常使用这种方法,也没有出现过问题啊?
这个问题比较简单吧。。。因为在8位的单片机中int类型是8位数据啊,所以当然有问题。。。定义为int32就没问题了。。。。
之前我也这样怀疑过,但是后来做了个实验确定了unsigned int 类型为16位数据。就是把一个unsigned int变量a先赋0,然后减一,从仿真器中看到值为65535。而且如果是8位数据话12左移7位值为1536也应该溢出了啊,但是结果却是对的。
暂时我也不知道是什么原因,建议在使用过程中使用uint32来定义
我们在代码里使用这个定义移8位16位都是正确的 会比较可靠
好的
,,,,,,,,
专门试了下,没问题