[英]Java >>>= operator
我想知道, >>>=
運算符可以應用於什么?
它適用於以下情況:
int >>>= int
long >>>= long
long >>>= int
long >>>= short
short >>>= long
short >>>= short
int >>>= byte
但不包括float
或double
任何東西。
為什么會這樣,我怎樣才能讓它適用於float
和double
?
謝謝!
考慮到比特代表什么,在浮點數或雙數位中移位比特沒有多大意義。
位63(由掩碼0x8000000000000000L選擇的位)表示浮點數的符號。 位62-52(由掩碼0x7ff0000000000000L選擇的位)表示指數。 位51-0(由掩碼0x000fffffffffffffL選擇的位)表示浮點數的有效數(有時稱為尾數)。
如果你在雙精度上做右移,那么signbit將被解釋為指數,並且指數的一部分將溢出到有效數字。 換班操作的語義將毫無意義。
如果你真的想轉移這些位,你可以通過Double.doubleToLongBits
和Double.longBitsToDouble
,如下所示:
// Unsigned shift right 3 of a double
Double.longBitsToDouble(Double.doubleToLongBits(d) >>> 3)
浮點類型本身是簽名的,因此>>>=
對float
或double
float
沒有意義。 如果你不能使用/
2的冪,那么你就有一個大問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.