位运算符

位运算符

  1. java中负数的表示

    • 简单来讲,java中负数的二进制表示是其绝对值取反+1

    • 例:int类型的-5怎么表示
      5 --> 0000 0000 0000 0000 0000 0000 0000 0101
      取反 --> 1111 1111 1111 1111 1111 1111 1111 1010
      +1 --> 1111 1111 1111 1111 1111 1111 1111 1011
      所以-5的表示是:1111 1111 1111 1111 1111 1111 1111 1011

    • 实际上,java中的负数是由其补码来表示(原码,反码,补码

    • 在计算机中,对于正数,原码,反码,补码都是本身;负数的反码是在原码基础上,符号位不变,其余各位取反,负数的补码则在反码的基础上+1;

    • 如:
      一个8位的-1原码为1000 0001(最高位表示符号,0为正1为负)
      则-1的反码为1111 1110(即符号位不变,其余各位取反)
      则-1的补码为1111 1111
      所以一个byte类型的-1在java中表示是1111 1111

  2. 左移右移

    1. << 左移
    2. >> 右移
    3. >>> 带符号右移
    4. 实例:
      int i = 5;
      int j = -5;
      String s = Integer.toBinaryString(i);//得到i的二进制数
      String s1 = Integer.toBinaryString(j);
      System.out.println(s);//101
      System.out.println(s1);//11111111111111111111111111111011
      
      //正数右移高位补0,负数带符号右移高位补1,不带符号右移高位补0
      System.out.println(i>>2);//1
      System.out.println(j>>2);//-2
      System.out.println(Integer.toBinaryString(j>>2));//11111111111111111111111111111110
      System.out.println(j>>>2);//无符号右移,1073741822
      System.out.println(Integer.toBinaryString(j>>>2));//00111111111111111111111111111110
      
      //左移低位补0
      System.out.println(i<<2);//20
      System.out.println(Integer.toBinaryString(i<<2));//10100
      System.out.println(j<<2);//-20
      System.out.println(Integer.toBinaryString(j<<2));//11111111111111111111111111101100
      
  3. 按位运算(其中按位非是一元操作符)

    1. 按位与(&)

    2. 按位或(|)

    3. 按位异或(^)

    4. 按位非(~)

    5. 实例:

      System.out.println(2&3);//2
      System.out.println(6|10);//14
      System.out.println(5^9);//12
      System.out.println(~5);//-6
      

      解析:

      1. 按位与:第一个数的第n位与第二个数的第n位都是1,则为1,否则为0;它有点像&&操作符(两个为true返回true)
        2的8位二进制:0000 0010
        3的8位二进制:0000 0011
        结果 :0000 0010
      2. 按位或:第一个数的第n位和第二个数的第n位有一个是1都为1,只有两者都是0才为0
        6的8位二进制:0000 0110
        9的8位二进制:0000 1010
        结果:0000 1110
      3. 按位异或:第一个数的第n位和第二个数的第n位不同返回1,相同返回0(即一个是1,一个是0返回1;两者都是1或都是0返回0)
        5的8位二进制:0000 0101
        9的8位二进制:0000 1001
        结果:0000 1100
      4. 按位非:给数的位取反(即1返回0,0返回1)
        5的8位二进制为:0000 0101
        取反后:1111 1010
        在java中最高位为符号位,所以1111 1010是一个负数,而且这是-6在java中的二进制表示
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值