运算符:
		就是对常量和变量进行操作的符号。
分类:算术运算符,赋值运算符,比较运算符,逻辑运算符,位运算符,三目运算符

一、算术运算符:
		+,-,*,/,%,++,--
	
	注意事项:
		1、整数相除只能得到整数。如果想得到小数,必须把数据变化为浮点数类型
		2、/获取的是除法操作的商,%获取的是除法操作的余数
3、++,--运算符的使用:
			1)、单独使用:
				放在操作数的前面和后面效果一样。(这种用法是我们比较常见的)
eg:
int x = 3;
					int y = 4;
					//x++;
					//y--;
//System.out.println("x:"+x+",y:"+y);//x:4,y:3
					++x;
					--y;
					System.out.println("x:"+x+",y:"+y);//x:4,y:3
			2)、参与运算使用:
				放在操作数的前面,先自增或者自减,然后再参与运算。
				放在操作数的后面,先参与运算,再自增或者自减。
eg:
int a = 3;
						int b = 4;
						//int c = a++;
						//int d = b--;
						int c = ++a;
						int d = --b;
						System.out.println("a:"+a); //4, 4
						System.out.println("b:"+b); //3, 3
						System.out.println("c:"+c); //3, 4
						System.out.println("d:"+d); //4, 3	
4、面试题
第一题:
			int a = 10;
			int b = 10;
			int c = 10;

			a = b++;
			c = --a;
			b = ++a;
			a = c--;
			请分别计算出a,b,c的值
			a = b++; //a=10,b=11,c=10
			c = --a; //a=9,b=11,c=9
			b = ++a; //a=10,b=10,c=9
			a = c--; //a=9,b=10,c=8

第二题:
			int x = 4;
			int y = (x++)+(++x)+(x*10);
			请分别计算出x,y的值
int x = 4;
			int y = (x++)+(++x)+(x*10);
			//4+6+60

二、赋值运算符:
		1、基本的赋值运算符:=
			把=右边的数据赋值给左边。	
		2、扩展的赋值运算符:+=,-=,*=,/=,%=
			+= 把左边和右边做加法,然后赋值给左边。
3、面试题:
			short s=1;s = s+1; 
			short s=1;s+=1;
			上面两个代码有没有问题,如果有,那里有问题。

			为什么第二个木有问题呢?
			扩展的赋值运算符其实隐含了一个强制类型转换。
			s += 1;
			不是等价于 s = s + 1;
			而是等价于 s = (s的数据类型)(s + 1);

三、比较运算符:
		==,!=,>,>=,<,<=
		1、特点:
			无论你的操作是简单还是复杂,结果是boolean类型。	
		2、注意事项:
			"=="不能写成"="。

四、逻辑运算符:
		&,|,^,!
		&&,||	
		1、特点:
			逻辑运算符一般用于连接boolean类型的表达式或者值。
在Java中不可以写成3<x<6,应该写成x>3 & x<6 。	
		2、表达式:就是用运算符把常量或者变量连接起来的符合java语法的式子。
			算术表达式:a + b
			比较表达式:a == b			
		3、结论:
			1)&逻辑与:有false则false。
			2)|逻辑或:有true则true。
			3)^逻辑异或:相同为false,不同为true。
				举例:情侣关系。男男,男女,女男,女女
			4)!逻辑非:非false则true,非true则false。
				特点:偶数个不改变本身。
4、&&和&的区别? 同理||和|的区别?
			1)最终结果一样。
			2)&&具有短路效果。左边是false,右边不执行。
			3)开发中常用的逻辑运算符:
				&&,||,!
			
五、位运算符:
		&,|,^,~
		<<,>>,>>>
		注意:
			要做位运算,首先要把数据转换为二进制的补码计算。
public static void main(String[] args) {
			int a = 3;
			int b = 4;
			System.out.println(3 & 4);
			System.out.println(3 | 4);
			System.out.println(3 ^ 4);
			System.out.println(~3);
		}
分析:因为是位运算,所以我们必须先把数据换算成二进制。
			3的二进制:11
				00000000 00000000 00000000 00000011
			4的二进制:100
				00000000 00000000 00000000 00000100
	
			&位与运算:有0则0。
				00000000 00000000 00000000 00000011
			     &00000000 00000000 00000000 00000100
				-----------------------------------
				00000000 00000000 00000000 00000000
				结果是:0
		
			|位或运算:有1则1。
				00000000 00000000 00000000 00000011
	   		     |00000000 00000000 00000000 00000100
				-----------------------------------
				00000000 00000000 00000000 00000111
				结果是:7
		
			^位异或运算:相同则0,不同则1。
				00000000 00000000 00000000 00000011
	  		     &00000000 00000000 00000000 00000100
				-----------------------------------
				00000000 00000000 00000000 00000111
				结果是:7
		
			~按位取反运算符:0变1,1变0
				00000000 00000000 00000000 00000011
	   		      ~11111111 11111111 11111111 11111100 (补码)
	   
	  			 补码:11111111 11111111 11111111 11111100
	  		 	反码: 11111111 11111111 11111111 11111011
	   			原码: 10000000 00000000 00000000 00000100
				结果是:-4

<<:左移	左边最高位丢弃,右边补齐0
	>>:右移	最高位是0,左边补齐0;最高为是1,左边补齐1
	>>>:无符号右移 无论最高位是0还是1,左边补齐0
public static void main(String[] args) {
			//<< 把<<左边的数据乘以2的移动次幂
			System.out.println(3 << 2); //3*2^2 = 3*4 = 12;
	
			//>> 把>>左边的数据除以2的移动次幂
			System.out.println(24 >> 2); //24 / 2^2 = 24 / 4 = 6
			System.out.println(24 >>> 2);
		
			System.out.println(-24 >> 2); 
			System.out.println(-24 >>> 2);
		}
分析:
计算出3的二进制:11
		00000000 00000000 00000000 00000011
	 (00)000000 00000000 00000000 0000001100
		
		>>的移动:	
		计算出24的二进制:11000
		原码:10000000 00000000 00000000 00011000
		反码:11111111 11111111 11111111 11100111
		补码:11111111 11111111 11111111 11101000
		
		11111111 11111111 11111111 11101000
		1111111111 11111111 11111111 111010(00) 补码
		
		补码:1111111111 11111111 11111111 111010
		反码:1111111111 11111111 11111111 111001
		原码:1000000000 00000000 00000000 000110
		
		结果:-6
		
		>>>的移动:
		计算出24的二进制:11000
		原码:10000000 00000000 00000000 00011000
		反码:11111111 11111111 11111111 11100111
		补码:11111111 11111111 11111111 11101000
		
		11111111 11111111 11111111 11101000
		0011111111 11111111 11111111 111010(00)

面试题:
		1、请用最有效率的方式写出计算2乘以8的结果?
			2 * 8
			2 << 3
2、请自己实现两个整数变量的交换?
int a = 10;
			int b = 20;
		
			//方式1:使用第三方变量(开发中用的)
			int c = a;
			a = b;
			b = c;
			System.out.println("a:"+a+",b:"+b);
	
			//方式2:用位异或实现(面试用)
			a = a ^ b;
			b = a ^ b; //a ^ b ^ b = a
			a = a ^ b; //a ^ b ^ a = b
			System.out.println("a:"+a+",b:"+b);
		
六、三目运算符:
		1、格式:比较表达式?表达式1:表达式2;
			比较表达式:结果是一个boolean类型。
		2、执行流程:
			根据比较表达式的计算返回一个true或者false。
			如果是true,就把表达式1作为结果。
			如果是false,就把表达式2作为结果。