逻辑运算符与(&)、或(|)、非(!)、异或(^)及双与(&&)和双或(||)
&& 与 两个操作数同时为true,结果为true,否则都是false
|| 或 两个操作数有一个为true,结果为true,否则为false
! 非 取反
注意短路效果!

a) 双与和单与

  1. true & true = true
  2. true & false = false
  3. false & false = false
  4. false & true = true
  5. int x = 3;
  6. int y = 4;
  7. //System.out.println((++x == 3) & (++y == 4)); //false & false = false
  8. //System.out.println("x = " + x); //x = 4
  9. //System.out.println("y = " + y); //y = 5
  10. System.out.println("---------------------------");
  11. System.out.println((++x == 3) && (++y == 4)); //false & false = false
  12. System.out.println("x = " + x); //x = 4
  13. System.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

//使用异或交换两个变量的值

  1. var num1 = 10;
  2. var num2 = 20;
  3. num1 = num1 ^ num2;
  4. num2 = num1 ^ num2;
  5. num1 = num1 ^ num2;
  6. console.log(num1, num2);

image.png

c) 移位操作符

<<左移
>>右移

运算符 运算 范例
<< 左移 3 << 2 = 12 —> 322=12
>> 右移 3 >> 1 = 1 —> 3/2=1
  1. // &&逻辑与 ||逻辑或 !取反
  2. // & |
  3. //true && true --->true
  4. //true && false --->false
  5. //false && false --->false
  6. //false && true --->false //如果用的是&&,先看左边的表达式是否是false,如果是false,那么右边的表达式就不看了,因为整个表达式的结果必然是false
  7. //true & true --->true
  8. //true & false --->false
  9. //false & false --->false
  10. //false & true --->false
  11. //true | true --->true
  12. //true | false --->true
  13. //false | false --->false
  14. //false | true --->true
  15. //true || true --->true
  16. //true || false --->true //如果用的是||,此时先看左边表达式的结果是否为true,如果为true,那么右边表达式就不看了,因为整个表达式的结果必然是true
  17. //false || false --->false
  18. //false || true --->true
  19. //为什么我们要用&& 或者 || 呢,原因&&和||多了一个短路的功能
  20. var a = 1;
  21. var b = 2;
  22. // & 取与
  23. /*(a++ > 0) | (b++ > 10);
  24. console.log(a); //2
  25. console.log(b); //3*/
  26. (a++ > 0) || (b++ > 10);
  27. console.log(a); //2
  28. console.log(b); //2
  29. console.log(!a); //false