2016-09-30 11 views
2

JavaFXのカスタムライブラリを参照することによりhttps://github.com/HanSolo/submitbutton/blob/master/src/main/java/eu/hansolo/submitbutton/Demo.javaJava論理XOR( "^")と論理NOT( "!")

は、私は、コードのこの作品と一緒に来:コーダがtoggle ^= true;を書いたなぜ私はそれが何をするかを理解している

    if (toggle) { //where toogle is a boolean 
        if (progress > 0.75) { 
          progress = 0; 
          button.setFailed(); 
          timer.stop(); 
          toggle ^= true; 
         } 
        } else { 
         if (progress > 1) { 
          progress = 0; 
          timer.stop(); 
          toggle ^= true; 
         } 
        } 
       } 

質問

following the table below

A B A^B 
0 0  0 
0 1  1 
1 0  1 
1 1  0 

代わりにtoggle=!toggle;を使用しますか?

+7

IMHOは不要な難読化のように見えます。ブール値を否定することを意味するときには '!'を使うべきです。 –

+0

ビットワイズ演算子の知識について自慢している人のように見えます(この場合、私に尋ねると不要です)。私の2セント。 –

+4

'someReallyLongVariableName^= true;'は、 'someReallyLongVariableName =!someReallyLongVariableName;'よりも読みやすいかもしれません。 – shmosel

答えて

1

FWIW ...パターンは、それがどんなパフォーマンスの向上に関係しているか、それは個人的な好みです?私も、私はこれを見る初めての原因と好奇心だということです、それは「ビット演算」ではありませんブーリアンの間。それは "論理的な操作"です。ブール値と整数の間の演算子間の演算子は、関連していますが、それぞれ異なります。

+1

「True = 1」と「False = 0」それは数字のように機能するか、間違っているのですか?それはどういう意味ですか? – GOXR3PLUS

+1

@ GoXR3Plus [JLS](http://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.22.2)は、オペランドがオペランドブール値です。 – EJP

+1

@ GoXR3Plusこれは本当に単なる用語ですが、Javaでは(Cとは異なり) 'false'は' 0'とはまったく異なります。それらは異なるタイプであり、互換性がありません。 "true = 1"と "false = 0"と言うのは正しくありません。 * bitwise * '^ '演算子は数値型で動作する演算子です。ブール論理演算子* '^'はブール値で動作します。同じ構文を使用していても、2つの完全に異なる演算子です。あなたの質問のタイトルは間違っています。 –