基本运算符与位运算符
算术运算符:两个操作数进行计算
+ 加
- 减
* 乘
/ 除(取整)
% 取余
例子:
class ArrayTest{
public static void main(String[] args){
int num1 = 12;
int num2 = 5;
int num3 = num1 / num2;
double num4 = num1 / num2 + 0.0;
double num5 = (num1 + 0.0) / (num2 + 0.0);
double num6 = num1 / (num2 + 0.0);
System.out.println("num3="+num3);//2
System.out.println("num4="+num4);//2.0
System.out.println("num5="+num5);//2.4
System.out.println("num6="+num6);//2.4
//%取余运算
int m1 = 12;
int n1 = 5;
System.out.println("m1%n1="+m1%n1);//2
int m2 = -12;
int n2 = 5;
System.out.println("m2%n2="+m2%n2);//-2
int m3 = 12;
int n3 = -5;
System.out.println("m3%n3="+m3%n3);//2
int m4 = -12;
int n4 = -5;
System.out.println("m4%n4="+m4%n4);//-2
}
}
编译运行:

自增与自减
++ 自增
-- 自减
例子:
class ArrayTest{
public static void main(String[] args){
//前++
int a1 = 10;
int b1 = ++a1;//a1自加1后赋值给b1
System.out.println("a1="+a1+" "+"b1="+b1);
//后++
int a2 = 10;
int b2 = a2++;//a2赋值给b2后再自加1
System.out.println("a2="+a2+" "+"b2="+b2);
//前--
int a3 = 10;
int b3 = --a3;//a3自减1后赋值给b3
System.out.println("a3="+a3+" "+"b3="+b3);
//后--
int a4 = 10;
int b4 = a4--;//a4赋值给b4后再自减1
System.out.println("a4="+a4+" "+"b4="+b4);
}
}
编译运行:

a++比++a在运行速度上快一点,a--比--a在行速度上快一点。
赋值运算符:
=
扩展的赋值运算符:+= *= -= /= %=
例子:
class ArrayTest1{
public static void main(String[] args){
//=
int i1 = 10;
int j1 = 10;
//连续赋值
int i2,j2;
i2 = j2 = 10;
int i3 = 10,j3 = 10;
//*****************
int num1 = 10;
num1 +=2;//num1 = num1 + 2;
System.out.println(num1);
int num2 = 12;
num2 %= 5;//num2 = num2 % 5;
System.out.println(num2);
short s1 = 10;
//s1 = s1 + 2;编译失败 左边short 右边至少得用int接收
s1 += 2;//不会改变变量本身的数值类型
System.out.println(s1);
//开发中,如果希望变量实现+2的操作,有几种方法?(int num = 10)
//1.num = num + 2
//2.num +=2(推荐)
}
}
编译运行:

关系运算符(会形成布尔表达式)--比较运算符
>
<
>=
<=
== a=b赋值 a==b表判断
!=
逻辑运算符
短路逻辑运算符:
当使用与逻辑运算符(短路与)时,在两个操作数都为true时,结果才为true,但是当得到第一个操作为false时,其结果就必定是false,这时候就不会再判断第二个操作了。
当使用与逻辑运算符(短路或)时,在两个操作数只要有一个为true时,结果就为true,但是当得到第一个操作为true时,其结果就必定是true,这时候就不会再判断第二个操作了。
&& 短路与 ,与(并且), 都为真才为真
|| 短路或,或(或者),只要有一个为真就为真
! 逻辑非(取反), 真变假,假变真
三元运算符(可以嵌套使用)
? : 布尔表达式?结果1:结果2 布尔表达式为真(true),获得结果1,否则为结果2
凡是有三元运算符的地方,都可以改写成if-else
位运算符:
&(非短路) 逻辑与,a&b按二进制求与
|(非短路) 逻辑或,a|b按二进制求或
^ 逻辑异或,a^b异或 相同时为0,不同时为1 任何一个数与0异或,还是原来的那个数
~ 按位置求反 按二进制求反 1变0,0变1
a=27 16+8+2+1 00011011
~a=-27 11100101 符号位甩出去, 0011011 -27
移位运算符
a=26
a=a>>1右移运算符
整体往右移1位 00011010 右移后 0(符号位还是原来的)0001101
a=13
结论:右移一位值为原来的一半,所以左移<<一位,值为原来的2倍。
a=20
a>>>1 a=10
a>>1 a=10
a=-20
a>>>1 a=2147483638(符号位丢了,0补了上去)
a>>1 a=-10
运算符的优先级(在表中最上边的优先级最高,从上往下依次递减)
| 后缀 | () [] . (点操作符) | 左到右 |
| 一元 | expr++ expr-- | 从左到右 |
| 一元 | ++expr --expr + - ~ ! | 从右到左 |
| 乘性 | * /% | 左到右 |
| 加性 | + - | 左到右 |
| 移位 | >> >>> << | 左到右 |
| 关系 | > >= < <= | 左到右 |
| 相等 | == != | 左到右 |
| 按位与 | & | 左到右 |
| 按位异或 | ^ | 左到右 |
| 按位或 | | | 左到右 |
| 逻辑与 | && | 左到右 |
| 逻辑或 | | | | 左到右 |
| 条件 | ?: | 从右到左 |
| 赋值 | = + = - = * = / =%= >> = << =&= ^ = | = | 从右到左 |
| 逗号 | , | 左到右 |