## 运算符
* 算数运算符:+,-,*,/,%(模),++,--
* 赋值运算符:=
* 关系运算符:>,<,>=,<=,==,!=instanceof
---
* 逻辑运算符:&&,||,!**(取反)**
* ---------------------------(重点掌握上面4个就好了)
* 位运算符(跟位相关的):&,|,^,~,>>,<<,>>>(了解它们就行了!)
* --------------------------------(下面两个是偷懒用的)
* 条件运算符?:
* 扩展赋值运算符:+=,-=,*=,/=
#### 口诀
&& 与运算,有假为假
|| 或运算,有真为真
! 非运算,假为真、真为假
异或运算,同号为假、异号为真
```java
package operator;
//逻辑运算符
public class Demo05 {
public static void main(String[] args) {
//与(and) 或(or) 非(取反)
boolean a=true;
boolean b=false;
System.out.println("a && b:"+(a&&b));//结果:false 口诀:有假为假
System.out.println("a || b:"+(a||b));//结果:true 口诀:有真为真
System.out.println("!(a && b):"+!(a&&b));//结果:true 口诀:真为假,假为真
//短路运算
int c = 5;
boolean d = (c<4)&&(c++<4);
System.out.println(d);
System.out.println(c);
}
}
```
| 含义 | Java |
| ---------- | ------ |
| 按位与 | a & b |
| 按位或 | a \|b |
| 按位异或 | a ^ b |
| 按位取反 | ~a |
| 左移 | a <<b |
| 带符号右移 | a >> b |
| 无符号右移 | a>>> b |
```java
package operator;
public class Demo06 {
public static void main(String[] args) {
/*
不要轻易的去使用位运算,很容易出错的
A = 0011 1100
B = 0000 1101
---------------------------
A&B = 0000 1100 与 口诀:两个为一,才为一;则反之。
A|B = 0011 1101 或 口诀:两个为零,才为零;则反之。
A^B = 0011 0001 异或 口诀:两个相同为零;否则为一。
~B = 1111 0010 取反 口诀:完全相反
位运算有一个好处,效率极高,应用在底层。
2*8=16 也可以写成2*2*2*2
<< 左移相当于 *2
>> 右移相当于 /2
0000 0000 0
0000 0001 1
0000 0010 2
0000 0011 3
0000 0100 4
0000 1000 8
0001 0000 16
*/
System.out.println(2<<3);//结果 16
}
}
```