逻辑运算符与(&)、或(|)、非(!)、异或(^)及双与(&&)和双或(||)
&& 与 两个操作数同时为true,结果为true,否则都是false
|| 或 两个操作数有一个为true,结果为true,否则为false
!  非  取反
注意短路效果!
a) 双与和单与
true & true = truetrue & false = falsefalse & false = falsefalse & true = trueint x = 3;int y = 4;//System.out.println((++x == 3) & (++y == 4)); //false & false = false//System.out.println("x = " + x); //x = 4//System.out.println("y = " + y); //y = 5System.out.println("---------------------------");System.out.println((++x == 3) && (++y == 4)); //false & false = falseSystem.out.println("x = " + x); //x = 4System.out.println("y = " + y); //y = 4
b) 位运算符
按位操作符用来操作整数基本数据类型中的单个比特(bit),就是二进制,按位操作符会对两个参数中对应的位(bit)执行布尔运算,最终生成一个结果。按位操作符来源于C语言面向底层的操作,Java设计的初衷是嵌入式电视机机顶盒,所以面向底层的操作也保留了下来。
任何信息在计算机中都是以二进制的形式保存的,”&”、“|”、“^”除了可以作为逻辑运算符也可以作为位运算符。位运算是直接对二进制进行运算。他们对两个操作数中的每一个二进制位都进行运算。例如int是由32个二进制数组成,因此使用位运算符可以对整数值的二进制数进行运算。
位(bit)运算符:
| & | 与(AND) | 
|---|---|
| | | 或(OR) | 
| ^ | 异或 | 
规则:
可以把1当做true 0当做false
只有参与运算的两位都为1,&运算的结果才为1,否则就为0。 
只有参加运算的两位都是0,| 运算的结果才是0,否则都是1。
只有参加运算的两位不同,^运算的结果才为1,否则就为0。
| 00000110 | 6 | 
|---|---|
| 00000011 | 3 | 
| 00000010 | 6 & 3 =2 | 
| 00000110 | 6 | 
|---|---|
| 00000011 | 3 | 
| 00000111 | 6|3 =7 | 
| 00000110 | 6 | 
|---|---|
| 00000011 | 3 | 
| 00000101 | 6^3 =5 | 
//使用异或交换两个变量的值
var num1 = 10;var num2 = 20;num1 = num1 ^ num2;num2 = num1 ^ num2;num1 = num1 ^ num2;console.log(num1, num2);

c) 移位操作符
<<左移
>>右移
| 运算符 | 运算 | 范例 | 
|---|---|---|
| << | 左移 | 3 << 2 = 12 —> 322=12 | 
| >> | 右移 | 3 >> 1 = 1 —> 3/2=1 | 
// &&逻辑与 ||逻辑或 !取反// & |//true && true --->true//true && false --->false//false && false --->false//false && true --->false //如果用的是&&,先看左边的表达式是否是false,如果是false,那么右边的表达式就不看了,因为整个表达式的结果必然是false//true & true --->true//true & false --->false//false & false --->false//false & true --->false//true | true --->true//true | false --->true//false | false --->false//false | true --->true//true || true --->true//true || false --->true //如果用的是||,此时先看左边表达式的结果是否为true,如果为true,那么右边表达式就不看了,因为整个表达式的结果必然是true//false || false --->false//false || true --->true//为什么我们要用&& 或者 || 呢,原因&&和||多了一个短路的功能var a = 1;var b = 2;// & 取与/*(a++ > 0) | (b++ > 10);console.log(a); //2console.log(b); //3*/(a++ > 0) || (b++ > 10);console.log(a); //2console.log(b); //2console.log(!a); //false
