设置第32位的编译器警告

Gos*_*mer 3 c 32-bit keil

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

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

PINSEL0 |= PINSEL_AD15;
Run Code Online (Sandbox Code Playgroud)

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

#define PINSEL0         (*((volatile unsigned long *) 0xE002C000))
Run Code Online (Sandbox Code Playgroud)

PINSEL_AD15定义如下:

#define PINSEL_AD15  ((1<<30)|(1<<31)) 
Run Code Online (Sandbox Code Playgroud)

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

Oli*_*rth 9

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

(1U << 31)
Run Code Online (Sandbox Code Playgroud)