万水千山走过

导航

位运算符“<<”,“>>”,“>>>”的区别。

1.左移"<<",无论是正数还是负数,低位都补0。

        byte a = 11;   
        byte b = -11;
        System.out.println("a = "+(a << 2));
        System.out.println("b = "+(b << 2));

(byte为1个字节)

正数:11 

     原码:0000 1011

     左移:0010 1100

     结果:44

负数:-11

      原码:1000 1011

      反码:1111 0100

      补码: 1111 0101

     左移:  1101 0100

    补码的补码(原码):1010 1100

    结果:-44

2.右移:“>>”,正数高位补0,负数高位补1.

        byte a = 13;   
        byte b = -13;
        System.out.println("a = "+(a >> 2));
        System.out.println("b = "+(b >> 2));

  正数:13

     原码: 0000 1101

     右移: 0000 0011

     结果: 3

负数:-13

    原码:1000 1101

    反码: 1111 0010

    补码: 1111 0011

    右移: 1111 1100

    补码的补码:1000 0100

    结果:-4

3.右移 “>>>”。为无符号右移,无论该数为正还是为负高位都为0.

        int a = 13;
        int b = -13;
        System.out.println("a = "+(a >>> 2));
        System.out.println("b = "+(b >>> 2));

 正数:13

       原码:00000000 00000000 00000000 00001101

       右移:00000000 00000000 00000000 00000011

       结果为:3

负数:-13(这个补码右移完后就是结果,不要再求补码)

       原码:10000000 00000000 00000000 00001101

        反码:11111111 11111111 11111111 11110010

       补码: 11111111 11111111 11111111 11110011

       右移: 00111111 11111111 11111111 11111100 

       结果:1073741820

  

posted on 2020-03-29 10:05  万水千山走过  阅读(1479)  评论(0编辑  收藏  举报