Why the expression (-1 >>> 32)
in Java is evaluated to -1
instead of 0
as expected? The >>>
-shift-operator should fill in preceeding 0s, so the result should have all bits set to 0.
This is weird, because it breaks the semantics of >>>
: e.g. (-1 >>> x)
has the first x bits set to 0 for all 0 <= x <= 31
. The only (unexpected) exception is 32.
Is this intentional behaviour, a bug or an (overmotivated) compiler optimization?
I used the expression ~(-1 >>> x)
for expanding a cidr-netmask to its 32-bit equivalent, but as it seems, /32-masks have to be handled separately.