对Java操作符的质疑
我正在查找某些GWT类的一些代码,遗憾的是,我无法理解这部分代码:对Java操作符的质疑,java,operators,bit-manipulation,Java,Operators,Bit Manipulation,我正在查找某些GWT类的一些代码,遗憾的是,我无法理解这部分代码: private void toggleHover() { // Toggle hovering. int newFaceID = getCurrentFace().getFaceID() ^ HOVERING_ATTRIBUTE; // Remove disabled. newFaceID &= ~DISABLED_ATTRIBUTE; setCurrentFace(newFac
private void toggleHover() {
// Toggle hovering.
int newFaceID = getCurrentFace().getFaceID() ^ HOVERING_ATTRIBUTE;
// Remove disabled.
newFaceID &= ~DISABLED_ATTRIBUTE;
setCurrentFace(newFaceID);
}
我不太了解java操作符,所以我的问题是:
到底发生了什么:
a) getCurrentFace().getFaceID()^悬停属性
b) newFaceID&=~禁用的\u属性代码>
&
是位AND运算符,^
是位异或运算符。这就是我所知道的一切。但是,我不理解~ DISABLED\u属性
以及在赋值过程中会发生什么
这段代码来自GWTcom.google.GWT.user.client.ui.CustomButton
class
提前感谢。带有^
的行正在切换悬停属性所代表的位。如果位为1,则表示为0;如果位为0,则表示为1
带有&=~
的行正在清除DISABLED\u属性
代表的位。无论在此之前该位的值是多少,该位现在都将为0
只有~
这个东西才能反转禁用的属性
的所有位,因此结果就是我们所说的适合于ANDIN的位掩码:禁用的属性
代表的位变为0,所有其他位变为1。因此,如果您使用此掩码和任何值,结果是该位将被清除,所有其他位将不受影响。~
在Java中是按位NOT运算符
总的来说,b)中的操作是,它接受NOT ofDISABLED\u属性,并将其与newFaceID
相加,然后将其分配给newFaceID
(这是一种掩蔽操作)。~
是按位的NOT
它将反转禁用的\u属性的每个位
这是一个很好的旧C样式位屏蔽。FaceID整数存储一组表示选定布尔属性的位
例如,悬停的_属性为2,禁用的_属性为4
通过运行按位异或(^)和按位非(~),可以设置或取消设置这两个位,同时保持其他位不变。ID中必须有一位保留用于悬停状态。表达式getCurrentFace().getFaceID()^HOVERING_属性
显示为切换当前面的悬停属性。换句话说,如果悬停_属性
位为一,则将其设置为零;如果为零,则设置为1
另一位必须为禁用状态。表达式newFaceID&=~DISABLED\u属性将清除此位。也就是说,DISABLED\u属性
位被设置为零。~
是一元按位NOT运算符。您使用过哪个教程来学习按位运算符?您的答案的可能副本更完整、更容易理解,因此我接受了它。其他答案也很有用。谢谢大家。