布尔“&”怎么样?和“&&”适用于比较?

时间:2013-06-19 09:00:16

标签: boolean boolean-logic

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

//这个“if”会出现吗?编译器会如何检查它?

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

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

1 个答案:

答案 0 :(得分:0)

&确实有点,所以

PORTB & PORTC == 0b00001011

将此转换为布尔值会产生true(非零)

&&执行布尔值,因此PORTBtrue(非零),PORTCtrue,所以

PORTB && PORTC

收益true


那有区别吗?是。 &&使用短路,而&则没有。请考虑以下事项:

0 & some_complicated_expression
0 && some_complicated_expression

在第一种情况下,将评估复杂的表达式。但是,由于&&使用短路,因此在第二种情况下不会评估复杂的表达式(表达式会产生false,而不管复杂表达式的结果如何。)