您现在的位置是:蓝石榴 > 个人博客 > Java

个人博客

Java程序开发常用的按位运算

2019-10-16Java 3159
把int a,b的值互换,不能使用临时变量,大家思考一下可以怎么操作呢?按位异或可以很便捷的解决这个问题,这次就系统学习下基本编程中的按位运算。
按位运算符

在Java语言中有以下几种按位运算符:

^ 按位异或(xor)

& 按位与(and)

| 按位或(or)

<< 左移

>> 右移

~ 按位取反

1、^按位异或运算

异或运算规则:同则0,异则1。如5^8如下:

0101

1000

1101 = 13 //result

如此再看把int a,b的值互换,不能使用临时变量这个问题,假设a=5,b=8,a^8的结果是a = 13即:1101。再用a^b

1101 //a

1000 //b

0101 //b = 5 a开始的值

1101 //a

0101 //b

1011 //a = 8 b开始的值

具体实现代码如下:

public void switchValue(int a,int b){

a = a^b;

b = a^b;

a = a^b;

}

这下就可以知道a和b的值互换了并且没有使用任何临时变量。根据以上过程对于异或就有以下几个特点:

A^0 = A, A^A = 0;

A^B^B = A;

A^B^C == C^A^B == B^C^A

这几条特性导致,^异或在某些方面的应用非常的适用。如题:

在一个n长度整数数组中,有一个整数出现了奇次,其他整数出现是偶次,找出这个整数?在这个题目中^异或就可以更好的解决这个问题,根据以上三条特性,出现偶次的整数在^后肯定为0,奇次的整数^后肯定是本身。因此可以把数组中的整数全部^后就可以得到这个数!

2、&按位与

按位与的规则如下:同真则真,一假则假。

1 & 1 = 1; 1 & 0 = 0; 0 & 0 = 0; 0 & 1 = 0

根据以上规则如需把某个整数A的值为0,直接可以使用:A = A & 0; 其经常用来屏蔽一些二进制位。例如 n = n & 0177,0177的二进制表示为:001 111 111,上句代码就是把n中除了7个低位的二进制外,其他的全部为0。还有 n = n & 0xFF就是把n中除了8个低位的二进制外,其他的全部为0。

3、| 按位或

按位或的规则如下:同假则假,一真则真。

1 | 1 = 1; 1 | 0 = 1; 0 | 0 = 0; 0 | 1 = 1

所以按位或常用来把某些值的某些二进制位设为1。如 A = A | 0XFF。就是把A的底八位的二进制值设置为1。

4、<<左移和>>右移

左移和右移是针对整数的二进制进行的。下面分别把8左移2为,把8右移2位。

0000 1000 //8的二进制表示

0010 0000 //32的二进制表示 左移2位的值

0000 0010 //2的二进制表示 右移2位的值

以上不足的位都是用0来补位。因此左移和右移可以从上看出:

A = A >> n,就是A除以2的n次方,A = A << n,就是A乘以2的n次方。

5、~取反

取反一看字义就知道取值得反值,~1 = 0,~0 = 1;

小结

以上就是语言中的按位运算符了。或许很多代码仔都觉得这个简单,当然确实不复杂,但是在实际的代码中能否使用好,就另当别论了。

很赞哦!(547)