基本运算符与位运算符
算术运算符:两个操作数进行计算
+ 加
- 减
* 乘
/ 除(取整)
% 取余
例子:
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 + - ~ ! | 从右到左 |
乘性 | * /% | 左到右 |
加性 | + - | 左到右 |
移位 | >> >>> << | 左到右 |
关系 | > >= < <= | 左到右 |
相等 | == != | 左到右 |
按位与 | & | 左到右 |
按位异或 | ^ | 左到右 |
按位或 | | | 左到右 |
逻辑与 | && | 左到右 |
逻辑或 | | | | 左到右 |
条件 | ?: | 从右到左 |
赋值 | = + = - = * = / =%= >> = << =&= ^ = | = | 从右到左 |
逗号 | , | 左到右 |