簡體   English   中英

Java >>> =運算符

[英]Java >>>= operator

我想知道, >>>=運算符可以應用於什么?

它適用於以下情況:
int >>>= int
long >>>= long
long >>>= int
long >>>= short
short >>>= long
short >>>= short
int >>>= byte

但不包括floatdouble任何東西。

為什么會這樣,我怎樣才能讓它適用於floatdouble

謝謝!

考慮到比特代表什么,在浮點數或雙數位中移位比特沒有多大意義。

位63(由掩碼0x8000000000000000L選擇的位)表示浮點數的符號。 位62-52(由掩碼0x7ff0000000000000L選擇的位)表示指數。 位51-0(由掩碼0x000fffffffffffffL選擇的位)表示浮點數的有效數(有時稱為尾數)。

如果你在雙精度上做右移,那么signbit將被解釋為指數,並且指數的一部分將溢出到有效數字。 換班操作的語義將毫無意義。

如果你真的想轉移這些位,你可以通過Double.doubleToLongBitsDouble.longBitsToDouble ,如下所示:

// Unsigned shift right 3 of a double
Double.longBitsToDouble(Double.doubleToLongBits(d) >>> 3)

來自Java語言規范

如果在一元數字提升之后移位運算符的每個操作數的類型不是基本整數類型,則這是編譯時錯誤。

您不能將任何移位運算符應用於浮點類型原始值。

浮點類型本身是簽名的,因此>>>=floatdouble float沒有意義。 如果你不能使用/ 2的冪,那么你就有一個大問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM