Java 位运算符

&(按位与)

把两个数字的所有的二进制位相与

1&1=1 1&0=0 0&0=0 0&1=0

|(按位或)

把两个数字所有的二进制位相或

1|1=1 1|0=1 0|0=0 0|1=1

~(按位取反)

把一个数字的所有二进制位取反

~1=0 ~0=1

^(按位异或)

把两个数字的所有二进制位异或

1 ^ 1=0 1 ^ 0=1 0 ^ 1=1 0 ^ 1=1

public class hello {
    public static void main(String[] args) {
        int i = -3;
        int j = 11;
        int k = i & j;  
        /* 3: 0000 0011 取反 1111 1100 加1: 1111 1101(-3的二进制 3的反码加一即补码)
           11的二进制代码是: 0000 1011
         */
        System.out.printf("%d\n",k);
    }
}

结果为9
1111 1101 (-3)
0000 1011(11)
0000 1001(9)

右移>>

在Java中右移没有任何歧义,这与C/C++不同。对于有符号数,在右移时,符号位将随同移动。当为正数时,最高位0,最高位补0,而为负数时,最高位为1,最高位补1

>>>

无论最高位是0还是1,右边移动的改为都补0

<< 和 <<<同理

System.out.println(8>>1);  //8/2=4
System.out.println(8>>2);  //8/4=2
System.out.println(8>>3);  //8/8=1

即右移一位/2的一次方 ,右移二位/2的二次方~~~

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值