## 运算符

* 算数运算符:+,-,*,/,%(模),++,--

* 赋值运算符:=

* 关系运算符:>,<,>=,<=,==,!=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
}
}

```