Java程序开发常用的按位运算
在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;
小结以上就是语言中的按位运算符了。或许很多代码仔都觉得这个简单,当然确实不复杂,但是在实际的代码中能否使用好,就另当别论了。
- 上一篇
JVM内存结构、Java内存模型、Java对象模型
Java作为一种面向对象的,跨平台语言,其对象、内存等一直是比较难的知识点。而且很多概念的名称看起来又那么相似,很多人会傻傻分不清楚。比如本文我们要讨论的JVM内存结构、Java内存模型和Java对象模型,这就是三个截然不同的概念,但是很多人容易弄混。
- 下一篇
Java开发中我们常说的JDK、JRE、JVM
JDK有以下三种版本:J2SE,standard edition,标准版,是我们通常用的一个版本J2EE,enterpsise edtion,企业版,使用这种JDK开发J2EE应用程序J2ME,micro edtion,主要用于移动设备、嵌入式设备上的java应用程序