warning: #61-D: integer operation result is out of range

STM32程序编译出现以下问题的解决方法:
//IO方向设置 

#define SDA_IN()  {GPIOC->CRH&=0X0FFFFFFF;GPIOC->CRH|=8<<28;} 
#define SDA_OUT() {GPIOC->CRH&=0X0FFFFFFF;GPIOC->CRH|=3<<28;} 
结果编译时出现错误 
compiling myiic.c... 
..\HARDWARE\IIC\myiic.c(57): warning:  #61-D: integer operation result is out of range 
..\HARDWARE\IIC\myiic.c(57): warning:  #68-D: integer conversion resulted in a change of sign 
..\HARDWARE\IIC\myiic.c(122): warning:  #61-D: integer operation result is out of range 
..\HARDWARE\IIC\myiic.c(122): warning:  #68-D: integer conversion resulted in a change of sign 
内容网上查好像是说 
编译器默认signed int即32位有符号整数类型,而1<<31实际为0x80000000,这样就有可能改写了符号位(最高位) 
答:
加个(u32)在8<<28; 
前面就可以了。

你可能感兴趣的:(warning: #61-D: integer operation result is out of range)