Java运算符之位运算运算符并举例说明

运算符分类:

  1. 算术运算符
  2. 赋值运算符
  3. 比较运算符
  4. 逻辑运算符
  5. 位运运算符
  6. 三目运算符

位运算运算符

 注意:要做位运算,首先要把数据转换为二进制
	(使用的是补码)
	     
	位运算符:
	&(00) , | (11) ,
	^(相同则0,不同则1) ,  ~(0110) ,
	<<(左移) , >>(右移)  ,  >>>(无符号)

位运算例子

class YunSuan{
	public static void main(String[] args){
		int a = 3;
		int b = 4;
		System.out.println(3 & 4);//输出结果0
		System.out.println(3 | 4);//输出结果7
		System.out.println(3 ^ 4);//输出结果7
		System.out.println( ~3);//输出结果-4
		
	/* 分析:
	   3的二进制
	   00000000 00000000 00000000 00000011
	   4的二进制
	   00000000 00000000 00000000 00000100
	   &位运算:有0则0.
	   00000000 00000000 00000000 00000011
	  &00000000 00000000 00000000 00000100
	  -------------------------------------
	   00000000 00000000 00000000 00000000
	   结果是:0
	   |位运算:有1则1
	   00000000 00000000 00000000 00000011
	  |00000000 00000000 00000000 00000100
	  -------------------------------------
	   00000000 00000000 00000000 00000111
	   结果是:7
	   ^位运算符:相同则0,不同则1
	   00000000 00000000 00000000 00000011
	  ^00000000 00000000 00000000 00000100
	  -------------------------------------
	   00000000 00000000 00000000 00000111
	   结果是:7
	   ~位运算:0变1,1变0
	   00000000 00000000 00000000 00000011
	  ~11111111 11111111 11111111 11111100
	  补码:11111111 11111111 11111111 11111100
	  反码:11111111 11111111 11111111 11111011
      原码:10000000 00000000 00000000 00000100 
	  结果是:-4   
	*/
	}
}	
^位的特点:一个数据对另一个数据异或(^)两次,该数据本身不变
例子:
class YunSuan{
	 public static void main(String[] args){
		 int a = 10;
         int b = 20;
         System.out.println( a ^ b ^ b );//	10
         System.out.println( a ^ b ^ a );//	20	 		 
	 } 
 } 
 	<<:左移 左边最高位丢弃,右边补齐0
	>>:右移  最高位是0,左边补1 最高为位是1左边补1
	>>>无符号:无论最高位是0还是1,左边补齐0
例子:
 class YunSuan{
	public static void main(String[] args){
		//<<把<<左边的数据*2的移动次幂
		System.out.println( 3 << 2 );//输出结果:3*2^2=12
		//>> 同理把>>左边的数据除以2的移动次幂
		System.out.println(24 >> 2);//输出结果:24/2^2=6
		System.out.prinyln(-24 >> 2);//输出结果:-24/2^2=-6
		System.out.println(-24 >>> 2);//输出结果:1073741818
		/* 
		( 3 << 2 )意思:计算出三的二进制,再向左移动两位丢弃,右边补0,<<的移动 计算出3的二进制
		00000000 00000000 00000000 00000011
  (00)00000000 00000000 00000000 00001100
		>>的移动  计算-24的二进制:
		原码:10000000 00000000 00000000 00011000
        反码:11111111 11111111 11111111 11100111
        补码:11111111 11111111 11111111 11101000
              1111111111 11111111 11111111 111010(00)
		
        补码:1111111111 11111111 11111111 111010(00)
        反码:1111111111 11111111 11111111 111001
		原码:1000000000 00000000 00000000 000110
		>>>的移动	计算-24的二进制:	
		原码:10000000 00000000 00000000 00011000
        反码:11111111 11111111 11111111 11100111
        补码:11111111 11111111 11111111 11101000
		      0011111111 11111111 11111111 111010(00)
		
		补码:0011111111 11111111 11111111 111010(00)
		反码:0011111111 11111111 11111111 111010(00)
		原码:0011111111 11111111 11111111 111010(00)
		结果:1073741818
		*/
	}
}    

例题:

  1. 请自己实现两个数的变量交换 。
  2. 请用最有效率的方式计算出2乘以8的结果?

例题一解决方法:

class yunsuan{
	 public static void main(String[] args){
		 int a = 10;
		 int b = 20;
		 System.out.println("a:"+a)
		 System.out.println("b:"+b)
方法一:使用第三变量
		 int c = a;
		 a = b;
		 b = c;
		 System.out.println("a:"+a)
		 System.out.println("b:"+b)
		 //输出结果:a:20 b:10
方法二:用位异或运算
		 a=a^b;
		 b=a^b;//a^b等于a^b^b=a		 
		 a=a^b;//a^b等于a^b^a=b
		 方法三:
		 a=a+b;//a=30
		 b=a-b;//b=10
		 a=a-b;//a=20
 方法四:一句话搞定
		 b=(a+b) - (a=b);//b=30-20=10 a=20
		 System
	 }
 }

例题二解决方法:

class YunSuan{
	public static void main(String[] args){
		System.out.println(2*8);
		System.out.println(2 << 3);
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Unknown To Known

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值