打印

430的shift count is too large的问题

[复制链接]
7007|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
justbybing|  楼主 | 2012-8-22 19:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
MSP430中unsigned long是32bit,左移16位及以上时会提示“shift count is too large".据说是跟MSP430是16单片机有关,可是为什么右移16位,甚至24位时没有该类提示呢?是不是因为右移是除法操作,数越来越小,而左移是乘法操作,数越来越大?

相关帖子

沙发
justbybing|  楼主 | 2012-8-22 19:39 | 只看该作者
如果我想将4个8bit的数合并成一个32bit的数该怎么实现?

使用特权

评论回复
板凳
eydj2008| | 2014-5-30 11:56 | 只看该作者
我也写了一个 不行
#define UcharToLONG(LONG24,LONG16,LONG8,LONG0)     ((u32)( ((u8)LONG24<< 24) | ((u8)LONG16<< 16)| ((u8)LONG8 << 8) | (u8)LONG0))
UcharToLONG(*Flash_ptr++,*Flash_ptr++,*Flash_ptr++,*Flash_ptr++);
这样警告 还不工作

使用特权

评论回复
地板
eydj2008| | 2014-5-30 13:46 | 只看该作者
为了后来者 这样就行了 采用标标的C编 译  反汇编时 直接将8位左移不行 超出了范围

#define UcharToLONG(LONG24,LONG16,LONG8,LONG0)     ((u32)( ((u32)LONG24<< 24) | ((u32)LONG16<< 16)| ((u32)LONG8<< 8) | (u32)LONG0))

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
longzhigu + 1 赞一个!
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

82

主题

1106

帖子

1

粉丝