2016-12-04 95 views
1

我有這樣的C代碼,並且無論是如果或當我通過它與調試器爲什麼這個if語句不運行?

這裏其他模塊運行的代碼是:

if(P2IN & BIT4 == BIT4){ 
    car_lock ^= BIT0; 
    is_pressed = 1; 
}else{ 
    is_pressed = 0; 
} 

在代碼中的這一點上,P2IN = 00010000

好像沒有if或else塊在運行,我在想什麼?

+3

顯然,兩個塊之一必須運行。嘗試在它們中的每一箇中插入一個'abort()'(或者你的本地等價物),看看哪一個會讓程序死掉。如果兩者都不是,那麼該程序不會執行您發佈的任何代碼。 –

+5

'if(P2IN&BIT4 == BIT4){' - >'if((P2IN&BIT4)== BIT4){' – BLUEPIXY

+0

'有沒有任何機會'is_pressed = 0'由於下面的代碼變得毫無意義?編譯器可以優化它,但調試器仍然會顯示完整的代碼,而您正在逐步完成它。 – giusti

回答

6

問題出在您的if聲明中。該==運營商需要更高的優先級比&,那麼什麼是真正被評價爲:

(P2IN & (BIT4 == BIT4)) 

您需要更改您的代碼:

if ((P2IN & BIT4) == BIT4) 

有運算符優先級here一個有用的網頁。