2013-06-19 51 views
0
PORTB = 0b11001011; 
PORTC = 0b00111011; 
if(PORTB & PORTC) 
    { 
    //do something 
    } 

//將這個「if」出來是真的嗎?編譯器會如何檢查它?布爾「&」和「&&」如何用於位比較?

PORTB = 0b11001011; 
PORTC = 0b00111011; 
if(PORTB && PORTC) 
    { 
    //do something 
    } 

//如何 「& &」 進行比較?如果我寫「如果(PORTB)」比編譯器如何評估它?

回答

0

&確實比特和,因此

PORTB & PORTC == 0b00001011 

轉換此爲布爾收率true(非零)

&&確實布爾和,所以PORTBtrue(非零)和PORTCtrue,所以

PORTB && PORTC 

收益率true


那麼是否有區別?是。 &&使用短路,而&不使用。考慮以下內容:

0 & some_complicated_expression 
0 && some_complicated_expression 

在第一種情況下,將評估複雜的表達式。但是,由於&&使用短路,所以在第二種情況下不評估複雜表達式(表達式產生false,與複雜表達式的結果無關)。

+0

@ huester 所以如果我寫簡單地評估一個二進制數爲十進制數,如果它不是零,那麼真的其他false.is這個? 例如ob00000011 = 3所以它是真的? 在你的例子第一種情況下,如果複雜的表達式出來是真的嗎? – shafeeq

+0

@shafeeq是的。無論「X」的值是多少,因爲「0&X == 0」都與複雜表達式的評估無關。 –

+0

u hanvt告訴我,如何評估二進制數字的真或假? – shafeeq