Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当比特移位16时,为什么输出会因铸造类型不同而不同_Java_Bit Shift - Fatal编程技术网

Java 当比特移位16时,为什么输出会因铸造类型不同而不同

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

尝试将x位移16位,但输出会因使用long还是int而有所不同,而且当我使用long时,负号似乎总是消失


我还注意到,当使用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
        
    }