运算符:
一.算术运算符:
算数运算符:
+、-、*、%、++、–
++和 --: 使用方式;单独使用,参与运算
当++、–出现在操作数的后面时,先传值再自加1/自减1
当++、–出现在操作数的前面时,先自加1/自减1再传值
class SuanShu{
public static void main(String[] args) {
//1.操作+;
int a=3;
int b=4;
//+(求和、字符串连接符)
System.out.println(a+b);//求和 7
//数值类型的数据和字符进行求和时,先把字符转成对应的编码值再进行求和
System.out.println(a+'a');//求和 100
//字符串常量可以和任意数据进行拼接
System.out.println(a+"a"); 3a
System.out.println(a+"a"+'a'); //3aa
//操作-
//小数没有精确运算
double d=2.1-1.9;
System.out.println(d); // 0.20000000000000018不是精确结果
//操作*
int a=6;
int b=2;
System.out.println(a/0);//ArithmeticException--算数异常
//java支持小数除0,不支持整数除0
System.out.println(a*1.0/0);//Infinity--正无穷大
System.out.println(-a*1.0/0);//-Infinity--负无穷大
System.out.println(0.0/0);//NaN--Not a Number 不是一个数
//当参与操作的都是整型数据结果依然是整型数据
System.out.println(2/4);//0
//当参与操作出现小数结果就是小数
System.out.println(2*1.0/4);//0.5
//操作%
int a=3;
int b=4;
//%左边数据的正负决定了结果的正负
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++); //3先赋值再自加
System.out.println(++a); //4先自加再赋值
//3++ +(--4)+(3--)+(++2)
//a=3 4 3 2 3
//左边变量值改变后会影响右边变量的值
int c=(a++)+(--a)+(a--)+(++a);
System.out.println(a); //4
System.out.println(b);
//byte,short,char做++、--时底层会默认添加强制类型转换
byte b1=127;
b1++;
short s=-32786;
s--;
System.out.println(s);//-128
}
}
二.赋值运算符:
赋值运算符:把右边的值赋值给左边
扩展赋值运算符(底层默认强加类型转换)
扩展赋值运算符:+=、-=、*=、/=、%=、&=(按位与等)、|=(按位或等)、^=(按位异或等)、>>=(右移等)、<<=(左移等)、>>>=(无符号左右移等)
class FuZhi{
public static void main(String[] args) {
//定义变量
int a=3;
int b=4;
a+=b;//a=a+b;
System.out.println(a);//7
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*5=15
//b=3+=3-=15 3=3-15=-12
//b=3+=-12 3=3-12=-9
//int b=a+=a-=a*=5;
//右边变量的值改变了不会影响左边已经编译好的值
//b=3+=3-=3*=3++
int b=a+=a-=a*=a++;
System.out.println(a);//-9
System.out.println(b);//-9
}
}
三.关系运算符:
关系(比较)运算符:结果值一定是布尔值
== 、!=、 >、 <、 >=、 <=
a>b>c a>b b>c
class GuanXi{
public static void main(String[] args) {
//操作==
System.out.println(2==4);//false
//操作>=
System.out.println(5>=0);//true
//操作!=
System.out.println(4!=5);//true
}
}
四.逻辑运算符:
逻辑运算符:&(逻辑与)、|(逻辑或)、^(逻辑异或)、!(逻辑非)、&&(逻辑双与)、||(逻辑双或)
总结:
1.&:遇见false则false
2.|:遇见true则true
3.^:相同则false,不同则true(吸铁石 同性相斥,异性相吸)
4.!:结果值取反(当出现偶数个时结果不变,奇数个取反)
5.&&:当&&与&运算规律一致,但是当&&左边出现false时,右边默认不执行--短路效果
6.||:当||与|运算规律一致,但是当||左边出现true时,右边默认不执行--短路效果
&& 和 || 常用
class LuoJi{
public static void main(String[] args) {
//定义变量
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));//flase&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("----------------");
//操作|
System.out.println((a>b)|(b>c));//false|false //false
System.out.println((a>b)|(b<c));//flase|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("----------------");
//操作^
System.out.println((a>b)^(b>c));//false^false //false
System.out.println((a>b)^(b<c));//flase^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("----------------");
//操作!
System.out.println("----------------");
System.out.println((b>c));//flase
System.out.println(!(b>c));//true
System.out.println(!(!(b>c)));//false
System.out.println(!(!(!(b>c))));//true
System.out.println("----------------");
//操作与&& 和逻辑&的运算规律一致
System.out.println((a>b)&&(b>c));//false&&false //false
System.out.println((a>b)&&(b<c));//flase&&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("----------------");
/*System.out.println((a++<=b)&&(b>c--)); //false
System.out.println(a); //2
System.out.println(c); //2*/
//||出现在&&左边且||出现短路(true),就会把它后面的内容及&&都短路掉
System.out.println((true)||(a++==b)&&(b>c--));//true
System.out.println(a); //1
System.out.println(c); //3
}
}
五.位运算符:
位运算符1
数据转成二进制补码形式
&(按位与)、|(按位或)、^(按位异或)、~(按位取反)
class WeiSuanDemo1{
public static void main(String[] args) {
//定义变量
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 3
//操作~
//按所有位取反
00000000 00000000 00000000 00000010
--------------------------------------------------------
11111111 11111111 11111111 11111101 负数 补码
11111111 11111111 11111111 11111100 反码
10000000 00000000 00000000 00000011 原码 -3
*/
位运算符2
>>(右移)、<<(左移)、>>>(无符号右移)
>>(右移):当正数进行右移时,右移几位就在最左边(最高位)补上几个0
当负数进行右移时,右移几位就在最高位补上几个1.
<<(左移):无论正负数进行左移时,左移几位就在最低位补上几个0.
>>>(无符号右移):无论正负数进行右移时,右移几位就在最高位补上几个0.
class WeiSuanDemo2{
public static void main(String[] args) {
int a=12;
//操作>>
System.out.println(a>>2);//3
//操作<<
System.out.println(a<<2);//48
//操作>>>
System.out.println(a>>>2);//3
}
}
/*
00000000 00000000 00000000 00001100 int 12补码
//操作>> 2
[00]000000 00000000 00000000 00000011(00)
---------------------------------------------
00000000 00000000 00000000 00000011 3:1+2
//操作<< 2
(00)000000 00000000 00000000 00001100[00]
---------------------------------------------
00000000 00000000 00000000 00110000 48:16+32
//操作>>> 2
[00]000000 00000000 00000000 00000011(00)
---------------------------------------------
00000000 00000000 00000000 00000011 3:1+2
*/
六.三目(元)运算符:
~a(一元)
a+b(二元)
三目(元)运算符
格式:布尔表达式?表达式值1:表达式值2;
执行流程:先计算出布尔表达式的值,如果是true返回表达式值1,如果是false返回表达式值2.
class SanMuDemo{
public static void main(String[] args) {
//求两个整数的最大值
int a=1;
int b=2;
//把三目的返回值赋值给新变量
//两个表达式值的类型要小于等于接受值的类型
int max=a>b?a:b;
System.out.println(max);//2
//求三个整数最大值
int a=1;
int b=2;
int c=3;
//三目嵌套
System.out.println(a>b?(a>c?a:c):(b>c?b:c));//3
}
}