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

//この「if」は true になりますか?コンパイラはどのようにチェックしますか?

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

// この "&&" はどのように比較されますか? 「if(PORTB)」と書いた場合、コンパイラはそれをどのように評価しますか?

4

1 に答える 1

0

&ビットと、そう

PORTB & PORTC == 0b00001011

これをブール値の利回りに変換しますtrue(非ゼロ)

&&はブール値であり、そうPORTBであるtrue(非ゼロ)、およびPORTCであるtrue、そう

PORTB && PORTC

収量true


違いはありますか?はい。&&短絡を使用しますが、使用し&ません。次の点を考慮してください。

0 & some_complicated_expression
0 && some_complicated_expression

最初のケースでは、複雑な式が評価されます。ただし、&&はショートサーキットを使用するため、2 番目のケースでは複雑な式は評価されません (false複雑な式の結果に関係なく、式は を生成します)。

于 2013-06-19T09:04:23.740 に答える