休耕說法是字符類的java:「<<」 操作符在Java中
(1 << Character.PARAGRAPH_SEPARATOR)) >> type
PARAGRAPH_SEPARATOR
是一個字節,type
是一個整數。
這句話中的操作符,它們做了什麼?我如何以及在哪裏可以使用這些運營商?
這裏是ORACLE java.lang.Character文檔。幾乎所有課堂上的方法都使用這些操作符。
休耕說法是字符類的java:「<<」 操作符在Java中
(1 << Character.PARAGRAPH_SEPARATOR)) >> type
PARAGRAPH_SEPARATOR
是一個字節,type
是一個整數。
這句話中的操作符,它們做了什麼?我如何以及在哪裏可以使用這些運營商?
這裏是ORACLE java.lang.Character文檔。幾乎所有課堂上的方法都使用這些操作符。
他們是位移位運算符。對於>>
,<<
將位「左移」(朝向最高有效位),反之亦然。左移或右移n位與乘法或除法分別相差2 n。
請參閱@ axtavt的評論,以解釋在這種情況下如何使用這些操作符。
它作爲一個高度優化的多重比較。完整表達式看起來像是'((((1 << Character.LINE_SEPARATOR)|(1 << Character.PARAGRAPH_SEPARATOR))>> type)&1)!= 0',如果'type'匹配其中一個常數。表達式的第一部分也是編譯時常量。 – axtavt 2010-10-23 00:49:11
@axtavt:感謝您的解釋。 – 2010-10-23 01:03:47
和@actavt,非常感謝:) – 2010-10-23 01:09:21
<<
是左移運算符:它將存儲在計算機左邊的二進制數移位。例如,二進制中的9是1001. 9 << 2
使二進制(36)中的100100,因爲它將其左移並在末尾添加0。 1 << n
與Math.pow(2, n)
是一樣的,除了它通常更快更好,以及返回int
而不是double
。
>>
是右移。它將其右移,並丟棄空位。 13是二進制的1101,所以13 >> 1
是二進制的110,或者是正常的6。
這些是bitwise shift運營商。
如果左移以下字節:
00000001
,你會得到:
00000010
即該模式已經「向左移動」並且零點填充在右側。因此,如果您對該結果應用右移運算符>>
,則會再次獲取原始字節。
你會發現,這些數字的十進制值是1和2。如果你轉移再次離開,你會得到:
00000100 = 4
所以你看,向左移動通過乘以數兩個(鑑於它不溢出),而右移兩個分歧。這在大多數計算機中都非常有效。所以這是您如何以實用的方式使用這些操作員的一個例子。
它作爲一個高度優化的多重比較。帶符號的左移運算符「< <」將位模式向左移位,並且帶符號的右移運算符「>>」將位模式向右移位。位模式由左側操作數給出,並由右側操作數移動位置數量。無符號右移運算符「>>>」將零移動到最左邊的位置,而「>>」之後的最左邊位置取決於符號擴展。
更多細節.... ü可以參觀 http://docs.oracle.com/javase/tutorial/java/nutsandbolts/op3.html
在哪裏出現呢?我沒有在當前的API文檔中看到它。 – 2010-10-23 00:20:51
你可以發佈你引用的文檔的引用嗎? – 2010-10-23 00:22:37
它幾乎每個類都在類java.lang.Character,Character.isDefined(),Character.isLetter()... – 2010-10-23 00:26:10