2010-10-23 108 views
2

休耕說法是字符類的java:「<<」 操作符在Java中

(1 << Character.PARAGRAPH_SEPARATOR)) >> type 

PARAGRAPH_SEPARATOR是一個字節,type是一個整數。

這句話中的操作符,它們做了什麼?我如何以及在哪裏可以使用這些運營商?

這裏是ORACLE java.lang.Character文檔。幾乎所有課堂上的方法都使用這些操作符。

+0

在哪裏出現呢?我沒有在當前的API文檔中看到它。 – 2010-10-23 00:20:51

+0

你可以發佈你引用的文檔的引用嗎? – 2010-10-23 00:22:37

+0

它幾乎每個類都在類java.lang.Character,Character.isDefined(),Character.isLetter()... – 2010-10-23 00:26:10

回答

7

他們是位移位運算符。對於>><<將位「左移」(朝向最高有效位),反之亦然。左移或右移n位與乘法或除法分別相差2 n

請參閱@ axtavt的評論,以解釋在這種情況下如何使用這些操作符。

+2

它作爲一個高度優化的多重比較。完整表達式看起來像是'((((1 << Character.LINE_SEPARATOR)|(1 << Character.PARAGRAPH_SEPARATOR))>> type)&1)!= 0',如果'type'匹配其中一個常數。表達式的第一部分也是編譯時常量。 – axtavt 2010-10-23 00:49:11

+1

@axtavt:感謝您的解釋。 – 2010-10-23 01:03:47

+0

和@actavt,非常感謝:) – 2010-10-23 01:09:21

2

<<是左移運算符:它將存儲在計算機左邊的二進制數移位。例如,二進制中的9是1001. 9 << 2使二進制(36)中的100100,因爲它將其左移並在末尾添加0。 1 << nMath.pow(2, n)是一樣的,除了它通常更快更好,以及返回int而不是double

>>是右移。它將其右移,並丟棄空位。 13是二進制的1101,所以13 >> 1是二進制的110,或者是正常的6。

3

這些是bitwise shift運營商。

如果左移以下字節:

00000001 

,你會得到:

00000010 

即該模式已經「向左移動」並且零點填充在右側。因此,如果您對該結果應用右移運算符>>,則會再次獲取原始字節。

你會發現,這些數字的十進制值是1和2。如果你轉移再次離開,你會得到:

00000100 = 4 

所以你看,向左移動通過乘以數兩個(鑑於它不溢出),而右移兩個分歧。這在大多數計算機中都非常有效。所以這是您如何以實用的方式使用這些操作員的一個例子。

1

它作爲一個高度優化的多重比較。帶符號的左移運算符「< <」將位模式向左移位,並且帶符號的右移運算符「>>」將位模式向右移位。位模式由左側操作數給出,並由右側操作數移動位置數量。無符號右移運算符「>>>」將零移動到最左邊的位置,而「>>」之後的最左邊位置取決於符號擴展。

更多細節.... ü可以參觀 http://docs.oracle.com/javase/tutorial/java/nutsandbolts/op3.html