2013-06-19 50 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