2013-03-12 31 views
3

設置第32位時,我在代碼中有編譯器警告。代碼的作品,但這個警告讓我煩惱。設置第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)) 

我收到該警告消息是:整數運算結果超出範圍

回答

9

字面1有符號整數,所以當你移動31時,你會超出範圍。嘗試使用無符號整數:

(1U << 31) 
+0

哇,這就是它:)我永遠不會猜測。感謝名單 – Gossamer 2013-03-12 22:01:56