最近在忙着导师的一个大项目,我这边要把一个matlab通信系统算法搬到我们项目组的特定处理器平台上。这个处理器比较无语的是,只支持16位定点数的运算。
言归正传,我在c语言的移位操作时,发现C语言移位操作是有前提条件的。
移位分为逻辑移位和算术移位。我其实只需要逻辑移位,我想当然的以为对于任何数都可以移位(博主c语言确实太差了,羞!),对比结果的时候,发现数据总有点小误差,理论上不应该有误差,结果应该时完全对的上。然后一顿断点分析,发现就是这个移位操作。
C语言编译器只能对无符号数进行逻辑移位操作,当要对负数进行逻辑移位时,C语言编译器会出现混乱,就是你以为进行了逻辑移位,但其实可能进行的是算术移位。
嗯,其实找到问题,也就可以说,问题解决了。更详细的关于解决这个移位操作的答案,大家随便到网上找找就可以解决啦!



