左オペランドがfalse
の場合、論理&&
演算子の短絡が発生します。これは、1つのオペランドがfalse
の場合、結果もfalse
であることがわかっているためです。なぜビットワイズ&演算子は短絡していませんか?
なぜビット単位の&
演算子も短絡していませんか?左のオペランドが0
の場合、結果は0
であることがわかります。これを(C、Javascript、C#)でテストしたすべての言語は、最初のオペランドの後で停止するのではなく、両方のオペランドを評価します。
オペアンプを短絡させると悪い考えがある理由はありますか?そうでない場合、なぜほとんどの言語がそれを短くするのではないのですか?それは明らかな最適化のようです。
理由の1つは、関数呼び出しの副作用を許容することです。 –
ビット演算子は通常、整数オペランドのビット演算(通常は単一のマシン命令に対応します)のために使用されるため、まれな0の場合を検査するための追加の条件を導入する最適化以外のものになります。乗算が0で短絡しないのはなぜですか?これは、単一の機械命令に対応する単純な算術演算であり、0オペランドの乗算をチェックすることはないでしょうか? –
ビット操作の '|'演算子は、左のオペランドが '0xFFFFFFFF'の場合に短絡する可能性があります。 –