1.单目运算
2.算术运算
算术运算符: +,-,*,/,%,++,--
示例:/ 和 %
int a = 12;
int b = 5;
int c = a / b;
System.out.println(c);//结果为2
int c1 = a / b * b;
System.out.println(c1);//结果为10
double c3 = a / b;
System.out.println(c3);//结果为2.0
double c4 = a / (b + 0.0);
System.out.println(c4);//结果为2.4
double c5 = (double)a / b;
System.out.println(c5);//结果为2.4
//%取余运算
int a1 = 12;
int b1 = 5;
System.out.println("a1 % b1="+a1%b1);//结果为a1 % b1=2
int a2 = -12;
int b2 = 5;
System.out.println("a2 % b2="+a2%b2);//结果为a2 % b2=-2
int a3 = 12;
int b3 = -5;
System.out.println("a3 % b3="+a3%b3);//结果为a3 % b3=2
int a4 = -12;
int b4 = -5;
System.out.println("a4 % b4="+a4%b4);//结果为a1 % b1=-2
//结果的符号与被模数的符号相同
示例:
//(前)++:先自增1,后再运算
//(后)++:先运算,后自增1
int a = 10;
int b = ++a;//先自增1,后再运算
System.out.println("a = " + a + ",b = " + b);
int a1 = 10;
int b1 = a1++;//先运算,后自增1
System.out.println("a1 = " + a1 + ",b1 = " + b1);
//(前)--先自减1,后再运算
//(后)--先运算,后自减1
int a2 = 10;
int b2 = --a2;
System.out.println("a2 = " + a2 + ",b2 = " + b2);
int a3 = 10;
int b3 = a3--;
System.out.println("a3 = " + a3 + ",b3 = " + b3);
结果:a = 11,b = 11
a1 = 11,b1 = 10
a2 = 9,b2 = 9
a3 = 9,b3 = 10
3.关系运算
关系运算 > < >= <= != == (注意是2个等号)
关系运算结果是:布尔类型(true,false)
4.逻辑运算
与 或 非 异或
两个操作数必须是布尔类型
单与和双与的区别?
-
在java中都可以进行逻辑与运算,运算结果都符合真值表
-
但是双与(&&)是有短路作用。短路,你能确定最总逻辑运算的结果时,后面的代码将不被运行。
-
当符号左边为true时,二者都会执行符号右边的运算
-
当独好左边时false时,&继续执行符号右边的运算。&&不再执行符号右边的运算。
示例:
boolean b =true;
b = false;
int num = 10;
if(b & (num++ > 0)) {
System.out.println("我是谁");
}else
{
System.out.println("我在哪");
}
System.out.println("num ="+num);
boolean b1 =true;
b1 = false;
int num1 = 10;
if(b && (num++ > 0)) {
System.out.println("我是谁");
}else
{
System.out.println("我在哪");
}
System.out.println("num1 ="+num1);
结果:我在哪
num =11
我在哪
num1 =10
5.什么时候应用短路逻辑运算?
-
空指针保护
6.逻辑运算的优先级
-
非运算
-
与运算
-
或运算
7.位运算符
7.1 左移操作:
(i*2的n次方),比乘以2的n次方的效率高,是一种高效率运算方式
int i=4;//0001 0000
int result=i<<2;//向左移动,右边补0
System.out.println(result==16);
7.2符号右移
向右移动,除以2的n次方
int i=-4;//1110 1111 -> 0111 0111
int result=i>>2;//符号右移:向右移动,除以2的n次方
System.out.println(result==-1);
7.3 无符号右移:
只适用于字节截取
int i=-4;
int result=i>>>16;//无符号右移:只适用于字节截取
System.out.println(result);
7.4 与运算:&
int i=4;//00000100
int j=8;//00001000
int k=i & j;
System.out.println((i & j)==0);//位运算只支持单&
7.5 或运算:|
int i=4;//00000100
int j=8;//00001000
int k=i | j;
System.out.println(k==12);
练习:
int m=12;
int n=5;
System.out.println("m & n :"+(m & n));
System.out.println("m & n :"+(m | n));
System.out.println("m & n :"+(m ^ n));
实例练习:位运算符
int num1=10;
int num2=20;
System.out.println("num1 = "+ num1 +", num2 = "+num2);
//方式一:定义临时变量
int temp = num1;
num1 = num2;
num2 =temp;
System.out.println("num1 = "+ num1 +", num2 = "+num2);
//方式二:好处:不用定义临时变量
// 弊端:相加操作可能超出存储范围;有局限性:只能适用于数值类型
num1=num1+num2;
num2=num1-num2;
num1=num1-num2;
System.out.println("num1 = "+ num1 +", num2 = "+num2);
//使用位运算符
num1 = num1 ^ num2;
num2 = num1 ^ num2;
num1 = num1 ^ num2;
System.out.println("num1 = "+ num1 +", num2 = "+num2);