位运算 & ~ >>

位运算

&与 ~取反

&就是两位都为1 结果为1 负责为0 ~就是取反1=0 0=1

public class BitOperator{
	//演示位运算
	public static void main(String[]args){
		System.out.println(2&3);
		//首先将2和3的补码推算出来 由于是int类型占4个字节所以
		//2的原码是 00000000 00000000 00000010 正数是三码合一所以补码也是这个
		//3的原码是 00000000 00000000 00000011 正数是三码合一所以补码也是这个
		//2&3 2与3规则 两位都是1 结果为1 否则为0
		//结果就是  00000000 00000000 00000010 结果是正数所以直接转成十进制就是 2
		System.out.println(~-2);
		//-2的原码  10000000 00000000 00000010
		//-2的反码  11111111 11111111 11111101
		//-2的补码  11111111 11111111 11111110
		//-2取反    00000000 00000000 00000001 结果是正数直接转成十进制结果为1
		System.out.println(~2);
		//2的原码   00000000 00000000 00000010
		//2的补码   00000000 00000000 00000010
		//2取反     11111111 11111111 11111101 结果是负数先求出反码
		//  反码    11111111 11111111 11111100
		//  原码    10000000 00000000 00000011 转换成10进制就是 -3  
	}
}

>>算术右移和 <<算术左移 >>>逻辑右移(无符号右移)

>>算术右移:低位溢出,符号位不变,并用符号位补溢出的高位 就是低位的数字右移相当于丢掉 这个字节的高位补符号位的数字 符号位不变(也可以理解为左边的除以右边的除以右边的6/2/2)

案例:6>>2

=00000110 10溢出(丢掉)符号位0补高位 =00000001 结果为1
负数演示
-5>>2

=10000101(原码)=11111011(补码)=11111110(结果的补码)=11111101(结果的反码)=10000010(结果原码)=-2
<<算术左移符号位不变低位 补0 就是低位向高位移动 空出来的低位填0(也可以理解为左边的乘以右边的乘以右边的)
案例:6<<2

=00000110 11左移 空处补0=00011000=24

负数演示
-3<<2

=10000011原码=111111100反码=11111101补码=左移符号位不变 空处补0=11110100结果的补码=11110011结果的反码=10001100结果的原码= -12
>>>逻辑右移(无符号右移)
就是算术右移 少了个符号位不变的要求

代码实例

public class BitOperator{
	//演示位运算
	public static void main(String[]args){
		System.out.println(6>>2);//1
		System.out.println(-5>>2);//-2
		System.out.println(6<<2);//24
		System.out.println(-3<<2);//-12
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值