2012-01-04 194 views
3

我一直在尋找一些GWT類的一些代碼,並且,可恥,我無法理解這部分代碼:懷疑與Java運營商

private void toggleHover() { 
    // Toggle hovering. 
    int newFaceID = getCurrentFace().getFaceID()^HOVERING_ATTRIBUTE; 

    // Remove disabled. 
    newFaceID &= ~DISABLED_ATTRIBUTE; 
    setCurrentFace(newFaceID); 
    } 

我不很清楚java的運營商,所以我的問題是:

究竟發生在:

一)getCurrentFace().getFaceID()^HOVERING_ATTRIBUTE

b)newFaceID &= ~DISABLED_ATTRIBUTE;

&是一個按位AND,^是一個按位異或運算符。這就是我所知道的。但是,我不明白~DISABLED_ATTRIBUTE和價值的assings發生了什麼。

這段代碼來自GWT com.google.gwt.user.client.ui.CustomButton類。

在此先感謝。

+0

'〜'是一個一元位運算符。 – BenCole 2012-01-04 19:59:07

+1

你曾經學習過哪些教程學習位運算符? – 2012-01-04 19:59:21

+1

可能的重複[在Java中按位運算的良好教程](http://stackoverflow.com/questions/1956160/good-tutorials-on-bitwise-operations-in-java) – 2012-01-04 20:01:37

回答

2

在爲懸停狀態保留的ID中必須有一點。表達式getCurrentFace().getFaceID()^HOVERING_ATTRIBUTE顯示爲toggle當前面部的懸停屬性。換句話說,如果HOVERING_ATTRIBUTE位是1,則它被設置爲零;如果它爲零,則設置爲1。

另一位必須是禁用狀態。表達式newFaceID &= ~DISABLED_ATTRIBUTE清除這一位。也就是說,DISABLED_ATTRIBUTE位設置爲零。

+0

您的答案有點更完整,容易理解,所以我接受了它。其他答案也有幫助。謝謝大家。 – caarlos0 2012-01-04 21:44:27

3

^的行正在切換HOVERING_ATTRIBUTE代表的位。如果該位爲1,則它爲0;如果該位爲0,則使其爲1.

帶有&= ~的行將清除DISABLED_ATTRIBUTE表示的位。不管該位在前的值是多少,該位現在爲0.

~ thingie單獨反轉DISABLED_ATTRIBUTE的所有位,所以結果就是我們所說的適用於ANDing的位掩碼:那麼DISABLED_ATTRIBUTE代表的值變爲0,所有其他位變爲1.所以,如果你使用這個掩碼和任何值,結果是該位將被清除,而所有其他位將不受影響。

1

~是Java中的一個按位NOT運算符。

總而言之,b)中的操作是取DISABLED_ATTRIBUTE的NOT,並將其與newFaceID相加,並將其分配給newFaceID(這是一個掩蔽操作)。

1

~是按位NOT

它將反轉DISABLED_ATTRIBUTE的每個位。

1

這是一個很好的舊C式掩碼。 FaceID整數存儲一組代表所選布爾屬性的位。

E.g. HOVERING_ATTRIBUTE是2,DISABLED_ATTRIBUTE是4.

通過運行按位異或(^)和按位不是(〜),可以設置或取消設置這兩個位,同時保持其他位完好無損。