java学习笔记之位运算

 java的七种位运算符

(1)  & 按位与运算符

            按位与运算是将参与运算的两数各对应的二进位进行逻辑与运算。运算规则:只有对应的两个二进位均为1时,结果位才为1 ,否则为0。例如,int型常量3和14进行位与运算的运算过程如下:

                3=0b0011,14=0b1110。则3&14 = 0b0011&0b1110 = 0b0010 = 2

代码如下:

public class Test{
 public static void main(String[] args) {
 
  //java中int占4字节,即32位
 
  int a=3;        //3的二进制表示: 0b00000000000000000000000000000011

  int b=14;       //14的二进制表示:0b00000000000000000000000000001110

     //输出结果为2,对应的二进制表示:0b00000000000000000000000000000010

  int c=a&b;

  System.out.println("输出的结果:"+c);
 }
 
}

             对于负数,按其补码进行运算(求负整数的补码,将其对应正数二进制表示所有位取反(包括符号位,0变1,1变0)后加1)。例如:int型常量-4和14进行位与运算的运算过程如下:

            -4=0b11111111111111111111111111111100 ,7 =0b00000000000000000000000000000111。则

                    -4&7 = 0b11111111111111111111111111111100 &0b00000000000000000000000000000111=0b00000000000000000000000000000100 = 4           

代码如下:

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

  //java中int占4字节,即32位

  int a=-4;      //-4的二进制表示: 0b11111111111111111111111111111100 

  int b=7;         //7的二进制表示:0b00000000000000000000000000000111

    //输出结果为4,对应的二进制表示:0b00000000000000000000000000000100 

  int c=a&b;

  System.out.println("输出的结果:"+c);

 }

}

                                                                                              

(2)  | 按位或运算符

            按位或运算是将参与运算的两数各对应的二进位进行逻辑或运算。运算规则:只要对应的二个二进位有一个为1时,结果位就为1。例如,int型常量3和14进行位或运算的运算过程如下:

                3=0b0011,14=0b1110。则3|14 = 0b0011|0b1110 = 0b1111=15

代码如下:

public class Test{ 
public static void main(String[] args) {
   //java中int占4字节,即32位
 
   int a=3;        //3的二进制表示: 0b00000000000000000000000000000011
 
   int b=14;       //14的二进制表示:0b00000000000000000000000000001110
 
      //输出结果为15,对应的二进制表示:0b00000000000000000000000000001111
 
   int c=a|b;
 
   System.out.println("输出的结果:"+c);
 
  }
 
}


(3)  ^按位异或运算符

            按位异或运算是参与运算的两数各对应的二进位相异或。运算规则:当两对应的二进位相不同时,结果为1,相同时为0。例如,int型常量3和14进行位异或运算的运算过程如下:

                 3=0b0011,14=0b1110。则3^14 = 0b0011^0b1110 = 0b1101=13

代码如下:

public class Test{
 public static void main(String[] args) {
 
   //java中int占4字节,即32位
 
   int a=3;        //3的二进制表示: 0b00000000000000000000000000000011
 
   int b=14;       //14的二进制表示:0b00000000000000000000000000001110
 
      //输出结果为13,对应的二进制表示:0b00000000000000000000000000001101
 
   int c=a^b;
 
   System.out.println("输出的结果:"+c);
  }
 
}


(4)  ~求反运算符

            求反运算是对参与运算的数的各二进位按位求反。运算规则:各二进制位0变成1,1变成0。例如,int型常量3求反运算的运算过程如下:

                    3=0b00000000000000000000000000000011,~3=~0b00000000000000000000000000000011=0b11111111111111111111111111111100=-4

代码如下:

public class Test{ 
 public static void main(String[] args) { 
 
   //java中int占4字节,即32位 
 
   int a=3;        //3的二进制表示: 0b00000000000000000000000000000011 
 
      //输出结果为-4,对应的二进制表示:0b11111111111111111111111111111100 
 
   int c=~a; 
 
   System.out.println("输出的结果:"+c);
 
  } 
 
}


(5)  <<左移运算符

            左移运算的实质是将对应的数据的二进制值逐位左移若干位,并在空出的位置上填0,最高位溢出并舍弃。运算规则:“<<”左边的运算数的各二进位全部左移若干位,由“<<”右边的数指定移动的位数,高位丢弃,低位补0左移n位就是乘以2的n次方)。例如,int型常量3左移1位的运算过程如下:

              3=0b00000000000000000000000000000011,3<<1=0b00000000000000000000000000000011<<1 = 0b00000000000000000000000000000110 = 6 =3X2^1

代码如下:

public class Test{ 
 public static void main(String[] args) { 
 
   //java中int占4字节,即32位 
 
   int a=3;        //3的二进制表示: 0b00000000000000000000000000000011 
 
      //输出结果为6,对应的二进制表示:0b00000000000000000000000000000110 
 
   int c=a<<1; 
 
   System.out.println("输出的结果:"+c); 
 
  } 
 
}




(6)  >>(有符号)右移运算符

             位右移运算(有符号)的实质是将对应的数据的二进制值逐位右移若干位,并舍弃出界的数字。运算规则:把“>>”左边的运算数的各二进位全部右移若干位,“>>”右边的数指定移动的位数。右移之后的空位用符号位补充,如果是正数用0补充,负数用1补充。(移n位就是除以2的n次方)例如,int型常量-4右移2位的运算过程如下:

-4=0b11111111111111111111111111111100,-4>>2=0b11111111111111111111111111111100>>2=0b11111111111111111111111111111111 = -1 = -4/2^2

代码如下:

public class Test{ 
 public static void main(String[] args) { 
 
   //java中int占4字节,即32位 
 
   int a=-4;        //-4的二进制表示: 0b11111111111111111111111111111100  
 
      //输出结果为-1,对应的二进制表示:0b11111111111111111111111111111111 
 
   int c=a>>2; 
 
   System.out.println("输出的结果:"+c); 
 
  } 
 
}

(7)  >>>(无符号)右移运算符

                同”>>“(有符号)一样其实质是将对应的数据的二进制值逐位右移若干位,并舍弃出界的数字。运算规则:把“>>”左边的运算数的各二进位全部右移若干位,“>>”右边的数指定移动的位数。右移之后的空位用0位补充。例如,int型常量-4右移2位的运算过程如下:

-4=0b11111111111111111111111111111100,-4>>>2=0b11111111111111111111111111111100>>>2=0b00111111111111111111111111111111 = 1073741823

代码如下:

public class Test{ 
 public static void main(String[] args) { 
 
   //java中int占4字节,即32位 
 
   int a=-4;        //-4的二进制表示: 0b11111111111111111111111111111100  
 
   //输出结果为1073741823,对应的二进制表示:0b00111111111111111111111111111111 
 
   int c=a>>>2; 
 
   System.out.println("输出的结果:"+c); 
 
  } 
 
}













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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值