JAVA位运算

1.位运算

位指的是二进制位,也就是比特位。
计算机中所有的运算在底层中都是二进制的运算。位运算可以提高程序的效率。而且以后我们在研究底层源码的时候会发现很多地方都用到了位运算,所以,有必要简单了解一下位运算

2. 位运算的种类

在进行位运算的时候,必须要把数据全部转换成二进制位,并且全部都是二进制的补码形式。

连接符操作规则运算类型
&按位与两个都是1的时候才是1双目运算
|按位或有1个为1即为1双目运算
^按位异或两个不一样为1,一样为0双目运算
~按位取反1变0,0变1单目运算
<<左移
>>右移
>>>无符号右移
2.1 | 运算
	System.out.println(~3);
	int a = 0b00000000000000000000000000000011;//3的补码也是原码
	// 运算之后的结果
	int b = 0b11111111111111111111111111111100;//最高位为1=负数,补码(因为a是补码,进行~运算之后还是补码)
	// 补码 = 原码取反 + 1
	// 补码 - 1
	int c = 0b11111111111111111111111111111011;
	// 原码
	int d = 0b10000000000000000000000000000100;
	System.out.println(b);
	System.out.println(c);
	System.out.println(d);
	//运算结果
	//-4
	//-4
	//-5
	//-2147483644
2.2 ^(异或)的常见应用
  • 一个数据对相同的数据异或两次,结果不变,一般应用在加密上.
  • 实现两个变量值的交换
    通常在两个变量之间进行数据交换需要用到第三个数据载体。例如a=10; b=20;c;
    c =a; a = b; b = c;
    通过==^==来实现:
	int a = 10;
	int b = 20;
	a = a ^ b;
	b = a ^ b;
	a = a ^ b;
	System.out.println(a);//20
	System.out.println(b);//10

2.3 位移运算符

  • 左移:让操作数乘以2的n(位移的位数)次幂。
  • 右移:让操作数除以2的n次幂。
  • 无符号右移:让操作数除以2的n次幂。
    左移
    往左边移动位数,右边会出现空位! 左边移动的两位就被挤掉了,右边空出来的用0补齐。
    右移
    往右边移动位数,左边会出现空位! 右边移动的两位就被挤掉了,左边空出来的用符号位补齐。
    无符号右移
    与右移区别:左边空出的位置不看符号位,全部用0补全
    结论: 正数的右移和无符号右移的结果是一样的。负数无符号右移之后变为一个正数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值