Java位运算

/* 位运算
   * java使用补码来表示2进制数,最高位为符号位,正数为0,负数为1,补码规定:
   * 整数,最高位是0,其余是本身,如 +42的补 码 为 00101010
   * 负数,最高位是1,将其余的决定值按位取反,最后+1,即为负数的补码;
   * 如 -42的 补 码 为 11010110 (00101010 按位 取 反 11010101 +1=11010110 )
********
*逻辑运算*
********
   a&b 与[真真为真,真假为假]

   0000 0000 0000 0000 0000 0000 0000 0001
   0000 0000 0000 0000 0000 0000 0000 0010
   =
   0000 0000 0000 0000 0000 0000 0000 0000
   System.out.println(1 & 2);

   结果为0


   a|b 或[假假为假,其余全真]
   0000 0000 0000 0000 0000 0000 0000 0001
   0000 0000 0000 0000 0000 0000 0000 0010
   =
   0000 0000 0000 0000 0000 0000 0000 0011
   System.out.println(1 | 2);

   结果为3


   ~a 非[真则假,假则真]
      0000 0000 0000 0000 0000 0000 0000 0001
      =
      1111 1111 1111 1111 1111 1111 1111 1110
      System.out.println(~1);

      结果为:-2


   a^b 异或: [相同为假,不同为真](任何一个数异或它自己为0,其他数再来异或它,等于其他数)
    0000 0000 0000 0000 0000 0000 0000 0001
    0000 0000 0000 0000 0000 0000 0000 0010
    =
    0000 0000 0000 0000 0000 0000 0000 0011
    System.out.println(1^2);

    结果为 3


********
*移位运算*
********

    a>>b 有符号右移位;将a右移b位;若正数,高位补0,负数,高位补1
   0000 0000 0000 0000 0000 0000 0000 0011
   >>1
   =
   0000 0000 0000 0000 0000 0000 0000 0001
   System.out.println(3>>1);

   结果为1,结果与 3 / 2的1次幂相同


   a<<b 有符号左移位;将a左移b位,若正数,高位补0,负数,高位补1
   0000 0000 0000 0000 0000 0000 0000 0011
   <<2
   0000 0000 0000 0000 0000 0000 0000 1100
   System.out.println(3<<2);

   结果为12,与3*2的2次幂相同


    a>>>b 无符号右移位;将a左移b位,不论正负,高位均补0
    0000 0000 0000 0000 0000 0000 0000 0011
   >>1
   =
   0000 0000 0000 0000 0000 0000 0000 0001
   System.out.println(3>>>1);
   结果为1,与3/2的1次幂相同
   */
   System.out.println(3>>>1);
   System.out.println();
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值