Java位运算符

位运算符

概念:

针对数据直接运算

基本的位运算符:

		位与&:有0,则0
		位或|:有1,则1
		位异或^:相同则为0,不同则为1
		反码~:所有的二进制位全部按位取反,0变1,1变0
class OperatorDemo{
	public static void main(String[] args){
		
		System.out.println(3&4) ;
		System.out.println(3|4) ;
		System.out.println(3 ^ 4) ;
		System.out.println(~3) ; 
 	}
}
/*
	3和4对应的原码
	
	00000000  00000000 00000000  00000011   3的原码,反码,补码
	
	00000000  00000000 00000000  00000100   4的原码,反码,补码
	

位与&:有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
​	
​	
​	
~3 所有的二进制位全部按位取反,0变1,1变0
​	00000000  00000000 00000000  00000011	
~

---------------------------------------

​	11111111  11111111 11111111  11111100   ----补码 
​	
​	
​	最高符号位     数值位					
​	1				1111111  11111111 11111111  11111100    补码

 - 1
   ---------------------------------------------------------

   1				1111111  11111111 11111111  11111011  	反码

   -----------------------------------------------------------

   1				0000000  00000000 00000000  00000100    原码	

   -							4
           */

/*
	位运算符里面的移位符号(扩展)
			<<(左移):  
					将"<<"左边的数据向左移动指定的位数(补码进行移动),
					将高位丢弃掉,空位补0
					
					结论:将"<<"左边的数据乘以2的移动次幂  
			
			>>(右移):
					将">>"左边的数据使用补码向右移动,如果最高符位是0,左边补0;
					如果最高符号位是1,左边补1;
					
					结论:将">>"左边的数据除以2的移动次幂
			>>>(无符号右移):
					将">>>"左边的数据使用补码向右移动,无论最高符号位是1
				还是0,永远左边空位补0;
*/
class OperatorDemo2{
	public static void main(String[] args){
			System.out.println(3 << 2) ;//3左移2位  (12)   3*2^2 
			
			System.out.println(24 >> 2) ; //24 右移2位   24 /2^2 = 6
			
			System.out.println(-24 >> 2) ;//-6
			
			System.out.println(-24>>>2) ;
	}
}
/*
	整数默认int
	3的原码-反码--补码相同
	00000000 00000000 00000000 00000011
    
(00)000000 00000000 00000000 0000001100

 00000000 00000000 00000000 00001100(补码---反码---原码)

 

 


 24 >> 2

 24的原码,反码,补码相同

 00000000 00000000 00000000 00011000
   0000000000 00000000 00000000 000110(00)

   00000000 00000000 00000000 00000110 ---补码--反码---原码

   6

   

  -24 >> 2 

  10000000 00000000 00000000 00011000  原码
  11111111 11111111 11111111 11100111  反码

  +                                 1

----------------------------------------

  11111111 11111111 11111111 11101000 补码
    1111111111 11111111 11111111 111010 (00)  --移动后的补码
	
	最高符号位  数值位
	1 			111111111 11111111 11111111 111010  补码

 - 1
   ---------------------------------------------------

   1 			111111111 11111111 11111111 111001  反码
   1           000000000 00000000 00000000 000110  原码

   -							6

  


  -24>>>2 
  11111111 11111111 11111111 11101000 补码 
    0011111111 11111111 11111111 111010 (00) 补码--反码---原码
/*
	位异或^特点
			一个数据被另一个数据位异或^两次,其值是它本身
*/
class OperatorDemo3{
	public static void main(String[] args){
		int a = 10 ;
		int b = 20 ;
		System.out.pritnln( a ^ b ^ b) ; 
	}

}
/*

	位异或^概念:
			相同则为0,不同则为1
			
			a ^ b
			00000000 00000000 00000000 00001010  --原码,反码,补码
			00000000 00000000 00000000 00010100  --原码,反码,补码
			------------------------------------------
			00000000 00000000 00000000 00011110  --补码--反码---原码
			00000000 00000000 00000000 00010100
			-----------------------------------
			00000000 00000000 00000000 00001010     10
			
*/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小周不要掉头发

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

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

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

打赏作者

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

抵扣说明:

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

余额充值