Java >>> =运算符

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

但不包括任何东西,包括floatdouble.

这是为什么,以及如何使之成为工作floatdouble

谢谢!

aio*_*obe 6

考虑到比特代表什么,在浮点数或双数位中移位比特没有多大意义.

位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)
Run Code Online (Sandbox Code Playgroud)


Sot*_*lis 5

来自Java语言规范

如果在一元数字提升之后移位运算符的每个操作数的类型不是基本整数类型,则这是编译时错误.

您不能将任何移位运算符应用于浮点类型原始值.