430的shift count is too large的问题

[复制链接]
 楼主| 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

粉丝
快速回复 在线客服 返回列表 返回顶部