史上最强运算符总结!!
1.算术运算符
1.1基本四则运算符(+ 、 - 、 * 、 / 、%)
基本四则运算符包括:加+ 、减- 、乘* 、除/ 、和取余% 。
规则较为简单,需要注意的是:
- 除法中除数与被除数的数值类型,例如:
int a = 10;
int b = 20;
System.out.println(a / b);
//结果为0
- 0不能做除数
int a = 1;
int b = 0;
System.out.println(a / b);
//结果会编译出错
出错原因为ArithmeticException(算术异常)。
- %不仅仅可以对int求模,也能对double求模
System.out.println(3.5 % 2.0);
// 1.5
1.2增量赋值运算符(+= 、 -= 、 *= 、 /= 、 %=)
增量赋值运算符表示:用被赋值的数据本身来进行一些运算,再将结果赋值给它。例如:
int a = 10;
a += 1;
等同于
int a = 10;
a = a + 1;
1.3自增/自减运算符(++ 、 --)
i++ 、 i-- 表示参与运算之后数值才会加1或减1
++i 、 --i 表示数值先加1或减1,再参与运算
int a = 10;
int b = ++a;
System.out.println(b);//结果为11
int c = a++;
System.out.println(c);//结果为11
int a = 10;
int b = a++;
System.out.println(b);
//10
int a = 10;
b = ++a;
System.out.println(b);
//11
int a = 10;
a = a++;
System.out.println(a);
//10
int a = 10;
a = ++a;
System.out.println(a);
//11
2.关系运算符(== 、 != 、 < 、 > 、 <= 、 >=)
关系运算符的表达式返回值都是boolean型。
int a = 1;
int b = 2;
System.out.println(a == b); //false
System.out.println(a > b); //false
System.out.println(a < b); //true
System.out.println(a != b); //true
System.out.println(a <= b); //true
System.out.println(a >= b); //false
3.逻辑运算符(&& 、 || 、 !)
3.1 逻辑与 &&
表达式1 && 表达式2 //有假即为假
int a = 10;
int b = 20;
int c = 30;
System.out.println(a < b && b < c);
//结果为true
- 表达式1和表达式2都为真的时候,整个表达式为true
- 若表达式1为假,则不会去执行表达式2,整个表达式为false (短路现象)
3.2 逻辑或 ||
表达式1 || 表达式2 //有真即为真
int a = 10;
int b = 20;
int c = 30;
System.out.println(a < b || c < a);
//结果为true
- 表达式1和表达式2都为假的时候,整个表达式为false
- 若表达式1为真,则不会去执行表达式2,整个表达式为true (短路现象)
3.3 逻辑非 !
int a = 10;
int b = 20;
System.out.println(!a < b);
//结果为false
3.4 短路求值
System.out.println(1 > 2 && 1 / 0); //false
System.out.println(1 < 2 || 1 / 0); //true
上述两个表达式都发生了短路现象,没能运行到第二步,1/0并没有被求值,故没有发生异常。
注意:
&和|不支持短路求值。
System.out.println(1 > 2 & 1 / 0); //程序抛出异常
System.out.println(1 < 2 | 1 / 0); //程序抛出异常
4.位运算符(& 、 | 、 ~ 、 ^)
java中对数据的操作的最小单位是二进制位。
4.1 与 &
有0就是0
01010000
& 00011100
00010000
4.2 或 |
有1就是1
01010000
| 00011100
01011100
4.3 非 ~
按位取反
01010000
10101111
4.4 异或 ^
不一样的位置进行或,一样的位上就是0。
01010000
^ 00011100
01001100
5.位移运算符(<< 、 >> 、 >>>)
5.1 左移 <<
方法:最左侧位不要,在最右侧补0。
00010100 <<1 = 00101000 20->40
00010100 <<2 = 01010000 20->80
左移相当于乘2。
5.2 右移 >>
方法:最右侧位不要,在最左侧补符号位。(正数补0,负数补1)
第一位是符号位,正数是0,负数是1。
00010100 >>1 = 00001010 20->10
00010100 >>2 = 00000101 20->5
左移相当于除2。
在此也需要了解一下补码、反码
例:
1000 0001 原码
1111 1110 反码 :符号位不变,其他位取反
1111 1111 补码 :反码+1
5.3 无符号右移 >>>
在右移的基础上,不管符号位是0还是1,统统补0。
10001101 >>>1 = 01000110
6.条件运算符
又叫三目运算符,是条件判断语句的简化写法。
当表达式1的值为true时,整个表达式的值为表达式2的值;
当表达式1的值为false时,整个表达式的值为表达式3的值;
表达式1 ? 表达式2 : 表达式3