当位移16时,为什么不同类型的铸件输出不同

  • 本文关键字:同类型 输出 16时 java bit-shift
  • 更新时间 :
  • 英文 :

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,因此发生溢出。

最新更新