2013-03-12 7 views
3

32 번째 비트를 설정하는 동안 컴파일러 경고 코드가 있습니다. 코드는 작동하지만이 경고는 나를 귀찮게합니다.컴파일러 경고 설정 32 번째 비트

컴파일러는 Keil C, 프로세서는 32 비트 ARM입니다. 코드

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

PINSEL_AD15로 정의 PINSEL0 32 비트 레지스터입니다

PINSEL0 |= PINSEL_AD15; 

를 다음과 같습니다과 같이 정의된다 :

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

내가받을거야 경고 메시지는 다음과 같습니다 정수 연산 결과가 범위를 벗어났습니다.

답변

9

리터럴 1의 부호가있는 정수이므로 31로 이동할 때 범위를 벗어납니다. 부호없는 정수를 사용해보십시오.

(1U << 31) 
+0

와우, thats :) 나는 결코 그것을 추측하지 않을 것입니다. 고맙습니다. – Gossamer