430的shift count is too large的问题

2019-08-04 21:14发布

MSP430中unsigned long是32bit,左移16位及以上时会提示“shift count is too large".据说是跟MSP430是16单片机有关,可是为什么右移16位,甚至24位时没有该类提示呢?是不是因为右移是除法操作,数越来越小,而左移是乘法操作,数越来越大?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
justbybing
1楼-- · 2019-08-04 21:47
 精彩回答 2  元偷偷看……
eydj2008
2楼-- · 2019-08-04 22:31
我也写了一个 不行
#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
3楼-- · 2019-08-04 23:01
为了后来者 这样就行了 采用标标的C编 译  反汇编时 直接将8位左移不行 超出了范围

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

一周热门 更多>