Java >>和>>>的区别

“>>是有符号位移,>>>是无符号位移”,如果移动的是一个非负数,这两个是没有任何区别的比如我们看下

public static void main(String args[]) {
          
   
        System.out.println();
        int num = 10000;
        System.out.println(num + "的二进制表示:           " + Util.bitInt32(num));
        System.out.println(num + "有符号位移之后的二进制表示:" + Util.bitInt32(num >> 3));
        System.out.println(num + "无符号位移之后的二进制表示:" + Util.bitInt32(num >>> 3));
    }

我们再来看下运行结果

10000的二进制表示:           00000000 00000000 00100111 00010000 
10000有符号位移之后的二进制表示:00000000 00000000 00000100 11100010 
10000无符号位移之后的二进制表示:00000000 00000000 00000100 11100010

“>>和>>>主要是对负数会有区别,我们来看下”

public static void main(String args[]) {
          
   
        System.out.println();
        int num = -10000;
        System.out.println(num + "的二进制表示:           " + Util.bitInt32(num));
        System.out.println(num + "有符号位移之后的二进制表示:" + Util.bitInt32(num >> 3));
        System.out.println(num + "无符号位移之后的二进制表示:" + Util.bitInt32(num >>> 3));
    }

这里把10000改为-10000,再来看下运行结果

-10000的二进制表示:           11111111 11111111 11011000 11110000 
-10000有符号位移之后的二进制表示:11111111 11111111 11111011 00011110 
-10000无符号位移之后的二进制表示:00011111 11111111 11111011 00011110
经验分享 程序员 微信小程序 职场和发展