Java逻辑XOR(“^”)与逻辑NOT(“!”)
通过在JavaFX中查找一些自定义库https://github.com/HanSolo/submitbutton/blob/master/src/main/java/eu/hansolo/submitbutton/Demo.java。Java逻辑XOR(“^”)与逻辑NOT(“!”)
我用这段代码走过来:
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;
}
}
}
问题
为什么编码器写道toggle ^= true;
我的理解它做什么following the table below:
A B A^B
0 0 0
0 1 1
1 0 1
1 1 0
改为使用toggle=!toggle;
?
是这样一种模式,它与任何性能的改善做的,或者是个人喜好?我很好奇,虽然导致我第一次看到这个...
FWIW,它不是一个“位运算”布尔之间。这是一个“逻辑操作”。布尔运算符和整数运算符之间的运算符是不同的,但是是相关的。
'True = 1'和'False = 0'然后它像数字一样工作,或者我错了?你的意思是? – GOXR3PLUS
@ GoXR3Plus [JLS](http://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.22.2)在操作数时称它们为“布尔逻辑运算符”是布尔型的。 – EJP
@ GoXR3Plus它实际上只是术语,但在Java中(与C不同)'false'与'0'完全不同。它们是不同的类型,不可互换。说“真= 1”和“假= 0”是不正确的。所以* bitwise *'^'运算符是一个对数字类型有效的运算符;它与在布尔运算上运行的*布尔逻辑运算符*'^'截然不同;它们是两个完全不同的运算符,即使它们使用相同的语法。要说的是,你的问题的题目是错误的。 –
恕我直言,这看起来像不必要的混淆。当你的意思是否定一个布尔值时,你应该使用'!'。 –
看起来像只是吹嘘自己对按位运算符的知识(在这种情况下,如果你问我的话是不必要的)。我的2美分。 –
'someReallyLongVariableName^= true;'可能比'someReallyLongVariableName =!someReallyLongVariableName;'更容易阅读。 – shmosel