Java逻辑异或(“^”)与逻辑非(“!”)
通过查看JavaFX中的一些自定义库 我带来了这段代码: 问题: 为什么编码器编写Java逻辑异或(“^”)与逻辑非(“!”),java,javafx,bit-manipulation,Java,Javafx,Bit Manipulation,通过查看JavaFX中的一些自定义库 我带来了这段代码: 问题: 为什么编码器编写toggle^=true我了解它的功能: 而是使用toggle=!切换 这是一种模式,它与任何性能改进有关,还是个人偏好?我很好奇,因为我第一次看到这个…FWIW,它不是布尔之间的“按位操作”。这是一种“逻辑操作”。Boolean和Int之间的运算符是不同的,尽管它们是相关的。IMHO这看起来像是不必要的混淆。你应该使用
toggle^=true代码>我了解它的功能:
而是使用toggle=!切换代码>
这是一种模式,它与任何性能改进有关,还是个人偏好?我很好奇,因为我第一次看到这个…FWIW,它不是布尔之间的“按位操作”。这是一种“逻辑操作”。Boolean和Int之间的运算符是不同的,尽管它们是相关的。IMHO这看起来像是不必要的混淆。你应该使用当你想否定一个布尔值时。看起来有人只是在吹嘘他们对位运算符的知识(如果你问我的话,在这种情况下没有必要)。我的2美分。someReallyLongVariableName^=true
可能比someReallyLongVariableName=更容易阅读!一些真正的长变量名称
。我更好奇的是,当它们可以显式设置为true或false时,为什么它会同时使用切换。@shmosel的确,因为它被包装在中,如果(…)
,它就相当于toggle=false代码>。我想我可能不会相信一个库中有这样的代码。True=1
和False=0
然后它像数字一样工作,或者我错了?你是什么意思?@GoXR3Plus在操作数是布尔的时候调用它们“布尔逻辑运算符”。@GoXR3Plus这实际上只是术语,但在Java中(与C不同)false
与0
完全不同;它们是不同的类型,不能互换。说“true=1
和false=0
”是不正确的。因此,按位^
运算符是一种处理数字类型的运算符;它不同于对布尔运算的布尔逻辑运算符^
;它们是两个完全不同的运算符,尽管它们使用相同的语法。我要说的是,你的问题的标题是错误的。@James_D这个布尔运算符在幕后是如何工作的?如果你想添加一个关于这个问题的答案,我可以接受。
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;
}
}
}
A B A ^ B
0 0 0
0 1 1
1 0 1
1 1 0