算术运算符
+ - * / % ++ --
使用方式:单独使用 参与运算
当++,--出现在操作数的后面是,先传值再自加1/自减1
当++,--出现在操作数的前面是,先自加1/自减1再传值
//操作+
int x=6;
int y=3;
/*System.out.println(x+y);//求和
System.out.println('x'+y);//求和
System.out.println("x"+'x');//字符串拼接*/
//操作-
/*System.out.println(y-x);
double a=(1.9-1.8);
System.out.println(a);//0.09999999999999987---小数没有精确运算*/
//操作/
//System.out.println(x/y);
//ArithmeticException--算术异常
//System.out.println(x/0);
//Infinity--正无穷大 支持小数除以零
//System.out.println(x*1.0/0);
//NaN---不是一个数
//System.out.println(0.0/0);
//当小数参与运算时结果是小数
//System.out.println(2.4/3);
//操作%
//%左边数据的正负决定了结果的正负
/*System.out.println(a%b);
System.out.println(-a%b);
System.out.println(a%-b);
System.out.println(-a%-b);*/
//操作++、--
int a=3;
//int b=--a;//参与运算
//System.out.println(a++);//单独使用
//System.out.println(++a);//单独使用
//byte、short、char做++/--时
//底层会默认添加强制类型转换
byte b1=127;
b1++;
short s=-32768;
s--;
System.out.println(s);
赋值运算符
把右边的值赋值给左边
扩展赋值运算符(底层默认强加类型转换)
扩展赋值运算符:+=、-=、*=、/=、%=、&=(按位与等)、|=(按位或等)、^=(按位异或等)、>>=(右移等)、<<=(左移等)、>>>=(无符号左右移等)
&= 例:a &= b 相当于a=a & b
|= 例:a |= b 相当于a=a | b
>>= 例:a >>= b 相当于a=a >> b
<<= 例:a <<= b 相当于a=a << b
^= 例:a ^= b 相当于a=a ^ b
//定义变量
/*int a=3;
int b=4;
a+=b;//a=a+b;*/
//
/*byte b=2;
//b=b+3;b+3为int类型
b+=3;//b=b+3;底层默认添加强制类型转换
System.out.println(b);*/
//支持定义形式
//int a=1,b=2,c=3;
//不支持连等定义
//int a=b=c=3;
//支持连等赋值
int a=3;
//展开从右往左计算
//b=3+=3-=3=3*5=15
//b=3+=3=3-15=-12
//b=3=3+(-12)=-9
//int b=a+=a-=a*=5;
//b=3+=3-=3*=3++
//右边变量的值改变了不会影响左边已经编译好的值
int b=a+=a-=a*=a++;
System.out.println(b);//-9
System.out.println(a);
关系(比较)运算符
== <= >= != < >
(结果值一定是布尔值)
//操作==
System.out.println(2==9);
//操作<=
System.out.println(2<=9);
//操作!=
System.out.println(3!=4);
逻辑运算符
用于连接左右俩边布尔值
&(逻辑与),|(逻辑或),^(逻辑异或),!(逻辑非),
&&(双与),||(双或)
总结:
1.&:遇见false则false
2.|:遇见true则true
3.^:相同则false,不同则true(吸铁石 同性相斥,异性相吸)
4.!:结果值取反(当出现偶数个数时结果不变)
&&(双与),||(双或)
&&和&运算规律一致,但是当&&左边出现false时,右边默认不执行---短路效果
||和|运算规律一致,但是当||左边出现true时,右边默认不执行---短路效果
||出现在&&的左边且||出现短路,就会把后面的内容以及&&一并短路掉
//定义变量
int a=1;
int b=2;
int c=3;
//操作&
System.out.println((a>b)&(b>c));//false&false false
System.out.println((a>b)&(b<c));//false&true false
System.out.println((a<b)&(b>c));//true&false false
System.out.println((a<b)&(b<c));//true&true true
//操作|
System.out.println((a>b)|(b>c));//false|false false
System.out.println((a>b)|(b<c));//false|true true
System.out.println((a<b)|(b>c));//true|false true
System.out.println((a<b)|(b<c));//true|true true
//操作^
System.out.println((a>b)^(b>c));//false^false false
System.out.println((a>b)^(b<c));//false^true true
System.out.println((a<b)^(b>c));//true^false true
System.out.println((a<b)^(b<c));//true^true false
System.out.println(!(!(b>c)));//true
//操作&&
//和逻辑与的运算规律一致
System.out.println((a>b)&&(b>c));//false&&false false
System.out.println((a>b)&&(b<c));//false&&true false
System.out.println((a<b)&&(b>c));//true&&false false
System.out.println((a<b)&&(b<c));//true&& true true
//a=1 b=2 c=3
//||出现在&&的左边且||出现短路
//就会把后面的内容以及&&一并短路掉
System.out.println((true)||(a++==b)&&(b>c--));
System.out.println(a);//1
System.out.println(c);//3
位运算符
数据转成二进制补码形式
&(按位与),|(按位或),^(按位异或),~(按位取反)
& : 遇0则0 任意整数&1==0 一定是偶数
任意整数&正数 一定是正数
| : 遇1则1 任意整数|0 一定是本身
任意整数|负数 一定是负数
^ : 相同则0不通则1 任意整数^0 一定是本身
扩展结论(当一个整数按位异或上另一个整数两次结果还是本身)
//定义变量
int a=2;
int b=3;
//操作&
System.out.println(a&b);//2
//操作|
System.out.println(a|b);//3
//操作^
System.out.println(a^b);//1
//操作~
System.out.println(~a);//-3
/*
00000000 00000000 00000000 00000010 int 2补码
00000000 00000000 00000000 00000011 int 3补码
//操作& 遇0则0 任意整数&1==0 一定是偶数
//任意整数&正数 一定是正数
00000000 00000000 00000000 00000010
00000000 00000000 00000000 00000011
------------------------------------
00000000 00000000 00000000 00000010 2
//操作| 遇1则1 任意整数|0 一定是本身
//任意整数|负数 一定是负数
00000000 00000000 00000000 00000010
00000000 00000000 00000000 00000011
-----------------------------------
00000000 00000000 00000000 00000011 3
//操作^ 相同则0不同则1 任意整数^0 一定是本身
00000000 00000000 00000000 00000010
00000000 00000000 00000000 00000011
------------------------------------
00000000 00000000 00000000 00000001 1
//操作~
//所有位按位取反
00000000 00000000 00000000 00000010
-----------------------------------
11111111 11111111 11111111 11111101 负数 补码
11111111 11111111 11111111 11111100 反码
10000000 00000000 00000000 00000011 原码 -3
*/
>>(右移),<<(左移),>>>(无符号右移)
>>(右移):当正数进行右移时,右移几位就在最左位(最高位)补上几个0.当负数进行右移时就在最高位补上几个1.
<<(左移):无论正数负数进行左移时,左移几位就在最右位补上几个0.
>>>(无符号右移):无论正负数进行右移时,右移几位就在最高位补上几个0。
int a=12;
//操作>> a/2`移动位数
System.out.println(a>>2);//3
//操作<< a*2`移动位数
System.out.println(a<<2);//48
//操作>>> 结果一定是正数
System.out.println(a>>>2);//3
三目(元)运算符(结果一定是一个值)
格式
布尔表达式?表达式值1:表达式2;
流程
先去计算出布尔表达式的值,如果是true返回表达式值1,如果是false返回表达式值2。
两个表达式的值的类型要小于等于接收值的类型
//求两个数最大值
int x=3;
int y=4;
int max=x>y?x:y;
System.out.println(max);
//求三个数最大值
int a=1;
int b=2;
int c=3;
System.out.println(a>b?(a>c?a:c):(b>c?b:c));