对Java操作符的质疑

对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

我正在查找某些GWT类的一些代码,遗憾的是,我无法理解这部分代码:

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属性
以及在赋值过程中会发生什么

这段代码来自GWT
com.google.GWT.user.client.ui.CustomButton
class


提前感谢。

带有
^
的行正在切换
悬停属性所代表的位。如果位为1,则表示为0;如果位为0,则表示为1

带有
&=~
的行正在清除
DISABLED\u属性
代表的位。无论在此之前该位的值是多少,该位现在都将为0


只有
~
这个东西才能反转
禁用的属性
的所有位,因此结果就是我们所说的适合于ANDIN的位掩码:
禁用的属性
代表的位变为0,所有其他位变为1。因此,如果您使用此掩码和任何值,结果是该位将被清除,所有其他位将不受影响。

~
在Java中是按位NOT运算符


总的来说,b)中的操作是,它接受NOT of
DISABLED\u属性,并将其与
newFaceID
相加,然后将其分配给
newFaceID
(这是一种掩蔽操作)。

~
是按位
的NOT


它将反转
禁用的\u属性的每个位

这是一个很好的旧C样式位屏蔽。FaceID整数存储一组表示选定布尔属性的位

例如,悬停的_属性为2,禁用的_属性为4


通过运行按位异或(^)和按位非(~),可以设置或取消设置这两个位,同时保持其他位不变。

ID中必须有一位保留用于悬停状态。表达式
getCurrentFace().getFaceID()^HOVERING_属性
显示为切换当前面的悬停属性。换句话说,如果
悬停_属性
位为一,则将其设置为零;如果为零,则设置为1


另一位必须为禁用状态。表达式
newFaceID&=~DISABLED\u属性将清除此位。也就是说,
DISABLED\u属性
位被设置为零。

~
是一元按位NOT运算符。您使用过哪个教程来学习按位运算符?您的答案的可能副本更完整、更容易理解,因此我接受了它。其他答案也很有用。谢谢大家。