今天看源码,突然看到Java中的一个基础知识点,突然不知道他们的区别是什么?再次回顾下基础;
Java运算中“|”与“||”及“&”和“&&”两者的区别
1、“|”和“||”用法的区别?
——“||”: 如果左边计算后的操作数为true,右边则不再执行,返回true;
“|”:前后两个操作数都会进行计算。
也就是说:“|”不存在短路。
例如:
int a = 8; int b = 11; if(a > 4 | b++ > 10) { System.out.println("a:"+a+"\nb:"+b); }
运行结果:a:8
b:12
int a = 8;
int b = 11;
if(a > 4 || b++ > 10) {
System.out.println("a:"+a+"\nb:"+b);
}
运行结果:a:8
b:11
注:&与&&区别与此类似。&总会计算前后两个操作数,而&&先计算左边的操作数,如果左边的操作数为false,则返回false,不会计算右边的操作数。
2、下面再细讲讲与、或,非、异或、位运算(移为运算的计算速度快)
int a = 4,b = 2;
- //1、&= 与运算 二进制中,只有同为1才是1
- a &= b;
- System.out.println("a: "+a);
- //2、|= 非运算 二进制中只要一个为1就为1
- a = 4;
- b = 2;
- a |= b;
- System.out.println("a: "+a);
- //3、^= 异或运算 二进制中只要是两者的值不一样那么就是1
- a = 4;
- b = 2;
- a ^= b;
- System.out.println("a: "+a);
- //4、<<= 移位运算 相当于是a = a * Math.pow(2,b);
- a = 4;
- b = 2;
- a <<= b;
- System.out.println("a: "+a);
- //5、>>= 移位运算 相当于是a = a / Math.pow(2,b);
- a = 4;
- b = 2;
- a >>= b;
- System.out.println("a: "+a);
- //6、~ 非运算 二进制所有的位数取反;
- a = 4;
- b = 2;
- a = ~a;
- b = ~a;
- System.out.println("a: "+a+" b: "+b);
- //7、>>>= 移位运算 二进制统一向右移 b位,左边不管是什么都用0代替,这是与 >>的区别;
- a = 4;
- b = 2;
- a >>>= b;
- System.out.println("a: "+a+" b: "+b);
- System.out.println(8>>>1);