Mar*_*son 2 java types variable-assignment assignment-operator operator-keyword
我想知道,>>>=运营商可以应用什么?
它适用于以下情况:
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)
Run Code Online (Sandbox Code Playgroud)