Java 当比特移位16时,为什么输出会因铸造类型不同而不同
尝试将x位移16位,但输出会因使用long还是int而有所不同,而且当我使用long时,负号似乎总是消失Java 当比特移位16时,为什么输出会因铸造类型不同而不同,java,bit-shift,Java,Bit Shift,尝试将x位移16位,但输出会因使用long还是int而有所不同,而且当我使用long时,负号似乎总是消失 我还注意到,当使用int时,它实际上是除以2^16,而使用long时,它不是,那里发生了什么?在第一种情况下,2517669219,也就是x>>16,被缩小为int int可以表示范围[-2147483648,2147483647]中的值 2517669219大于2147483647。在第一种情况下,2517669219,即x>>16,被缩小为int int可以表示范围[-214748364
我还注意到,当使用int时,它实际上是除以2^16,而使用long时,它不是,那里发生了什么?在第一种情况下,
2517669219
,也就是x>>16
,被缩小为int
int
可以表示范围[-2147483648,2147483647]
中的值2517669219
大于2147483647
。在第一种情况下,2517669219
,即x>>16
,被缩小为int
int
可以表示范围[-2147483648,2147483647]
中的值2517669219
大于2147483647
,情况也是如此
public static void main(String[] args) {
long x = 164997969936395L;
int a = (int)(x >>> 16);
System.out.println(a); //Prints -1777298077
long b = (x >>> 16);
System.out.println(b); //Prints 2517669219
}