Java中的位运算符解析

 与远算,或运算,异或运算,反码

public class OptPositionDemo1 {
    public static void main(String[] args) {

        int x = 3;
        int y = 4;

        System.out.println(x&y); //0
        System.out.println(x|y); //7
        System.out.println(x^y); //7
        System.out.println(~x);  //-4

    }
}

分析:
            要先得到二进制  计算机中数据参与运算的都是补码

      3的二进制:11
      4的二进制:100
      3的原码、反码、补码:00000000 00000000 00000000 00000011
      4的原码、反码、补码:00000000 00000000 00000000 00000100

      &位与运算:有0则0
          00000000 00000000 00000000 00000011
        &
          00000000 00000000 00000000 00000100
       -----------------------------------------
          00000000 00000000 00000000 00000000
       结果是0


      |位或运算:有1则1
          00000000 00000000 00000000 00000011
        |
          00000000 00000000 00000000 00000100
      ------------------------------------------
          00000000 00000000 00000000 00000111
       结果是7

      ^位异或运算:相同则0,不同则1
          00000000 00000000 00000000 00000011
        ^
          00000000 00000000 00000000 00000100
      ------------------------------------------
          00000000 00000000 00000000 00000111
       结果是7

      ~位取反:0变成1,1变成0
          00000000 00000000 00000000 00000011
         --------------------------------------
        ~ 11111111 11111111 11111111 11111100

        补码求原码:
              符号位                    数值位
        补码:  1              1111111 11111111 11111111 11111100
        反码:  1              1111111 11111111 11111111 11111011
        原码:  1              0000000 00000000 00000000 00000100
        结果是-4

左移,右移,无符号右移

public class OptPositionDemo2 {
    public static void main(String[] args) {
        System.out.println(3 << 2);
        System.out.println(24 >> 2);
        System.out.println(24 >>> 2);

        System.out.println(-24>>2);
        System.out.println(-24>>>2);
    }
}

            <<:左移:向左移动,最高位丢弃,右边补0
            >>:右移:向右移动,最高位是0,左边补0,最高位是1,左边补1
            >>>:无符号右移:向右移动,无论最高位是0还是1,右边都用0补齐

分析:
            想要参与位运算,就必须得先知道二进制
        1、计算出3的二进制:11
        3的二进制补码:
                       00000000 00000000 00000000 00000011
                   (00)00000000 00000000 00000000 00001100
        结果是:12

        2、计算出24的二进制:11000
        24的二进制的补码:
                       00000000 00000000 00000000 00011000
                       00000000 00000000 00000000 00000110(00)
        结果是:6


        3、计算出24的二进制:11000
        24的二进制的补码:
                       00000000 00000000 00000000 00011000
                       00000000 00000000 00000000 00000110(00)
        结果是:6

        4、计算出24的二进制:11000
           原码: 10000000 00000000 00000000 00011000
           反码: 11111111 11111111 11111111 11100111
           补码: 11111111 11111111 11111111 11101000

           -24的补码:
                  11111111 11111111 11111111 11101000
                  11111111 11111111 11111111 11111010(00)
           补码:11111111 11111111 11111111 11111010
           反码:11111111 11111111 11111111 11111001
           原码:10000000 00000000 00000000 00000110
           结果是:-6

       5、 计算出24的二进制:11000
           原码: 10000000 00000000 00000000 00011000
           反码: 11111111 11111111 11111111 11100111
           补码: 11111111 11111111 11111111 11101000

           -24的补码:
                  11111111 11111111 11111111 11101000
                  00111111 11111111 11111111 11111010(00)
          结果是:1073741818

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值