java的位运算符的理解和使用

常见的位运算符如下图:

具体规则如下

第一部分:

  1. &----有0则0
  2. |------有1则1
  3. ^-----相同为0,不同为1
  4. ~-----0变1,1变0 
// 分析 先把数据转换为二进制
// 3的二进制 11,补码 00000000 00000000 00000000 00000011
// 4的二进制100,补码 00000000 00000000 00000000 00000100
int a=3;
int b=4;
System.out.println(3&4); //0----有0则0
System.out.println(3|4); //111-----7   有1则1
System.out.println(3^4); //111------7  相同为0,不同为1
System.out.println(~3); //-4 0变1,1变0   
// 补码:11111111 11111111 11111111 11111100
// 反码:11111111 11111111 11111111 11111011
// 原码:10000000 00000000 00000000 00000100	

第二部分:

  1. 一个数据被位运算(^)俩次,其结果不变
     System.out.println(3^4^4); //3
     System.out.println(4^3^3); //4
  2. 把<<左边的数据向左移几位,相等于左边的数据乘以2的移动次幂
    System.out.println(3<<2); // 3*2^2=12
    /*
     <<左移
    			计算3的二进制:11
    				00000000 00000000 00000000 00000011
    		   (00) 00000000 00000000 00000000 00001100
    */

     

  3. 把>>左边的数据右移几位,相等于左边的数据除以2的移动次幂
    System.out.println(-4>>2); //-4/2^2=-1
    /*	
    		   计算出4的二进制:0100
    				原码:10000000 00000000 00000000 0000100
    				反码:11111111 11111111 11111111 1111011
    				补码:11111111 11111111 11111111 1111100
    					  11111111 11111111 11111111 11111111(00) 补码
    			
    				补码:11111111 11111111 11111111 11111111
    				反码:11111111 11111111 11111111 11111110
    				原码:10000000 00000000 00000000 00000001
    				
    				结果:-1
    */

     

  4.  >>>(无符号右移)------无论最高位是0还是1,左边补齐0

    System.out.println(-4>>>2);
    /*
    计算出4的二进制:0100
    				原码:10000000 00000000 00000000 0000100
    				反码:11111111 11111111 11111111 1111011
    				补码:11111111 11111111 11111111 1111100
    					  0011111111 11111111 11111111 11111(00)
    			
    				结果:1073741823
    */

     

   注意:

  1. 首先把数据转换为二进制
  2. &,|,^当俩边是数据做位运算,俩边是布尔值做逻辑运算      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值