3

设置第 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)) 

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

4

1 回答 1

9

文字1是一个有符号整数,所以当你移动 31 时,你就会超出范围。尝试使用无符号整数:

(1U << 31)
于 2013-03-12T22:00:24.050 回答