当16位移位时,为什么输出会因为类型转换的不同而不同

lnxxn5zx  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(330)

这个问题在这里已经有了答案

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时,它不是,那里发生了什么?

0mkxixxg

0mkxixxg1#

在第一种情况下, 2517669219 ,即 x >>> 16 ,缩小到 int . int 可以表示范围内的值 [-2147483648, 2147483647] . 2517669219 大于 2147483647 ,因此发生溢出。

相关问题