位运算溢出错误

在编写测试程序的过程中,有如下定义:

#define UART1_EN              (1<<31)

编译后编译器报错:

integer operation result is out of range (61-D),经查资料是由于溢出所致,宏定义默认常量是有符号型,当左移31位时,常数就变成负数,编译器就会给出如上的警告信息解决办法是强制类型转换成无符号类型:

#define UART1_EN              ((U32)1<<31)

这样,警告信息就消除了。

posted @ 2019-02-14 19:18  lemaden  阅读(529)  评论(0编辑  收藏  举报