设置第32位的编译器警告

时间:2013-03-12 21:58:49

标签: c 32-bit keil

设置第32位时,代码中有编译器警告。代码有效,但这个警告让我很烦恼。

编译器是Keil C,处理器是32位ARM。代码如下

PINSEL0 |= PINSEL_AD15;

其中PINSEL0是32位寄存器,定义为

#define PINSEL0         (*((volatile unsigned long *) 0xE002C000))

PINSEL_AD15的定义如下:

#define PINSEL_AD15  ((1<<30)|(1<<31)) 

我收到的警告信息是:整数运算结果超出范围

1 个答案:

答案 0 :(得分:9)

文字1是一个签名的整数,因此当您移动31时,您将超出范围。尝试使用无符号整数:

(1U << 31)