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
}
试图将x位移16位,但输出不同,这取决于我使用的是long还是int,而且当我使用long时,负号似乎总是消失。
我还注意到,当使用int时,它真的被2^16整除,而使用long时,它不是,那里发生了什么?
在第一种情况下,2517669219
(即x >>> 16
(缩小为int
。
CCD_ 4可以表示范围CCD_2517669219
大于2147483647
,因此发生溢出。