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

//这个“如果”会是真的吗?编译器将如何检查它?

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

//如何比较这个“&&”?如果我写“if(PORTB)”而不是编译器将如何评估它?

4

1 回答 1

0

&确实有点,所以

PORTB & PORTC == 0b00001011

将其转换为布尔值true(非零)

&&是否为布尔值,所以PORTBtrue(非零),并且PORTCtrue,所以

PORTB && PORTC

产量true


那么有区别吗?是的。&&使用短路,而&没有。考虑以下:

0 & some_complicated_expression
0 && some_complicated_expression

在第一种情况下,将评估复杂的表达式。但是,由于&&使用短路,复杂表达式不会在第二种情况下计算(表达式产生false,与复杂表达式的结果无关)。

于 2013-06-19T09:04:23.740 回答