PORTB = 0b11001011;
PORTC = 0b00111011;
if(PORTB & PORTC)
{
//do something
}
//这个“if”会出现吗?编译器会如何检查它?
PORTB = 0b11001011;
PORTC = 0b00111011;
if(PORTB && PORTC)
{
//do something
}
//这个“&&”比较?如果我写“if(PORTB)”而不是编译器如何评估它?
答案 0 :(得分:0)
&
确实有点,所以
PORTB & PORTC == 0b00001011
将此转换为布尔值会产生true
(非零)
&&
执行布尔值,因此PORTB
为true
(非零),PORTC
为true
,所以
PORTB && PORTC
收益true
那有区别吗?是。 &&
使用短路,而&
则没有。请考虑以下事项:
0 & some_complicated_expression
0 && some_complicated_expression
在第一种情况下,将评估复杂的表达式。但是,由于&&
使用短路,因此在第二种情况下不会评估复杂的表达式(表达式会产生false
,而不管复杂表达式的结果如何。)