public static void main(String[] args) {
//算数运算符		
		int a=10;
		int b=10;
		int c=10;
		
		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
		
		System.out.println("a:"+a);
		System.out.println("b:"+b);
		System.out.println("c:"+c);
		
		int x = 4;
		int y = (x++)+(++x)+(x*10);
		//4  6  60
		System.out.println("x:"+x);
		System.out.println("y:"+y);
		
		System.out.println('a');
		System.out.println('a'+1);
		
		System.out.println("hello"+'a'+1);
		System.out.println('a'+1+"hello");
          //例题		
		/*short s = 1;
		s=s+1;
		System.out.println(s);*/
		//short类型参与运算时默认转化为int类型
		//转而又赋值给short类型,则会损失精度
		
		short s = 1;
		s+=1;//扩展的赋值运算符其实隐含了一个强制类型转换
		System.out.println(s);
		
//比较运算符,其返回值类型为布尔类型		
		int w=10;
		int r=2;
		boolean flag=(r==w);
		System.out.println(flag);
		System.out.println(r<=w);
		
//逻辑运算符 ,逻辑运算符一般用于连接boolean类型的表达式或值
		//表达式:就是 用运算符把常量或者变量 连接起来的符合java语法的式子
		//&:有false则false
		
		//|:有ture则ture
		//^:相同为false,不同为ture
		    //举例:情侣关系:男男,女女,男女,女男
		//!:非false则ture,非ture则false;特点:偶数个不改变本身
		int l=3;
		int m=4;
		int n=5;
	//逻辑与	
		System.out.println((l>m)&(l>n));//false & false=false
		System.out.println((l>m)&(l<n));//false & true=false
		System.out.println((l<m)&(l>n));//true & false=flase
		System.out.println((l<m)&(l<n));//ture & ture=ture
	//逻辑或
		System.out.println((l>m)|(l>n));//false | false=false
		System.out.println((l>m)|(l<n));//false | true=ture
		System.out.println((l<m)|(l>n));//true | false=ture
		System.out.println((l<m)|(l<n));//ture | ture=ture
	//逻辑异或
		System.out.println((l>m)^(l>n));//false ^ false=false
		System.out.println((l>m)^(l<n));//false ^ true=ture
		System.out.println((l<m)^(l>n));//true ^ false=ture
		System.out.println((l<m)^(l<n));//ture ^ ture=false
	//逻辑非
		System.out.println(!(l>n));//!false=ture
		System.out.println(!(l<n));//!ture=false
		System.out.println(!!(l>n));//!!false=false

	//&&双与	
		System.out.println((l>m)&&(l>n));//false && false=false
		System.out.println((l>m)&&(l<n));//false &&true=false
		System.out.println((l<m)&&(l>n));//true && false=flase
		System.out.println((l<m)&&(l<n));//ture && ture=ture
		
		//&&和&:最终结果一样;  &&具有短路效果,左边是false右边不执行
		//同理||和|:最终结果一样;  ||具有短路效果,左边是ture右边不执行
		int e=3;
		int f=4;
		
		//boolean b1=((e++ == 3) & (f++ == 4));//ture
		//boolean b1=((e++ == 3) && (f++ == 4));//ture
		//boolean b1=((++e == 3) & (f++ == 4));//4,5,false
		boolean b1=((++e == 3) && (f++ == 4));//4,4,false
		System.out.println("e:"+e);
		System.out.println("f:"+f);
		System.out.println(b1);
		
//位运算首先将数值转化为二进制
		//&位与运算,有0 则0 ;
		//|位或运算,有1则1;
		//^位异或运算,相同则0,不同则1
		//~按位取反,0变1,1变0
		/*数值3
		 二进制:00000000 00000000 00000000 00000011
		       ~111111111 11111111 11111111 11111100(补码)
		       
		     补码:111111111 11111111 11111111 11111100
		    反码=补码-1:11111111 11111111 11111111 11111011
		    原码(反码的符号位不变,其他位取反):10000000 00000000 00000000 00000100
		 		结果是:-4
		 */
		//^位异或特点:一个数据对另一个数据位异或两次,该数本身不变、
		/*
		 用异或实现a,b两数交换
		 方法一:面试
		a=a^b;
		b=a^b;//a^b^b=a
		a=a^b;//a^b^a=b
		方法二:一句话搞定(了解)
		b=(a+b)-(a=b);
		方法三:开发使用
		int c = a;
		a = b;
		b = c;
		 */
		//<<:左移  丢弃左边,右边补0;即把<<左边的数据*2的移动次幂
		System.out.println(3<<2);//3*2^2=12
		/*
		 计算3的二进制
		 00000000 00000000 00000000 00000011(正数原码即反码)
       (00)000000 00000000 00000000 0000001100
		 */
		//>>:右移  最高位是0,左边补齐0;最高位是1,左边补齐1;即把>>左边的数据/2的移动次幂
		//>>>:无符号右移 无论最高位是1还是0,左边补齐0;
		System.out.println(24>>2);//24/2^2=6
		System.out.println(24>>>2);//6
		
		System.out.println(-24>>2);
		System.out.println(-24>>>2);
		/*
		 * >>的移动
		 计算24的二进制 :11000
		 -24的原码:10000000 00000000 00000000 00011000
		 -24的反码:11111111 11111111 11111111 11100111
		 -24的补码:11111111 11111111 11111111 11101000
		  右移           :1111111111 11111111 11111111 111010(00)补码
		  
		  补码:1111111111 11111111 11111111 111010
		  反码:1111111111 11111111 11111111 111001
		  原码:1000000000 00000000 00000000 000110
		  
		  结果:-6
		  >>>的移动
		  计算24的二进制 :11000
		 -24的原码:10000000 00000000 00000000 00011000
		 -24的反码:11111111 11111111 11111111 11100111
		 -24的补码:11111111 11111111 11111111 11101000(正数,原补码相同)
		  右移         :  0011111111 11111111 11111111 111010(00)
		  结果:1073741818
		 */
		//例题:2*8==2<<3
	
//三目运算符
		/*(关系表达式)?表达式1:表达式2;
		   若关系表达式为ture,运算结果为表达式1
		  若关系表达式为false,运算结果为表达式2
		 */
    /*
     获取三个数中的最大值,除了常规的两步判断外
     一步搞定:int max=(a>b)?((a>c)?a:c):((b>c)?b:c);//先判断a>b在继续往后
     */
	}