这个问题在这里已经有了答案:
int-cast在java中工作多长时间(1个答案)
上个月关门了。
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时,它不是,那里发生了什么?
1条答案
按热度按时间0mkxixxg1#
在第一种情况下,
2517669219
,即x >>> 16
,缩小到int
.int
可以表示范围内的值[-2147483648, 2147483647]
.2517669219
大于2147483647
,因此发生溢出。