⭐前言⭐
※※※大家好!我是同学〖森〗,一名计算机爱好者,今天让我们进入学习模式。若有错误,请多多指教。
👍 点赞 ⭐ 收藏 📝留言 都是我创作的最大的动力!
⭐目录⭐
⭐思维导图⭐
⭐正文⭐
1.算术运算符
1.1基本运算符(+,- ,*,/ ,%)
加,减,乘不用多讲,但需注意类型提升,对此有疑惑的小伙伴请移步---》数据类型
+、-、*、/、%都为二元运算符,
二元运算符:二元运算符指的是需要两个操作数才能完成运算的运算符。
/除:注意被除数不能为零,不然编译会报错。
%求余:右操作数不能为零。
%: 其操作数可以为浮点数,一般使用整数,结果是“余数”,“余数” 符号和左边操作数相同。
下面小题两道,如果你回答正确,那这基本四则运算符,你也就毫无问题了。
//下列输出结果是多少?
System.out.println(7/4);
System.out.println((float)(7/4));
System.out.println((float)7/4);
System.out.println(7/(float)4);
结果:1、1.0、1.75、1.75
7/4因为都是整数,所以结果就是1;
(float)(7/4) 根于括号,先算7/4,然后对1强转为1.0;
(float)7/4) 或 7/(float)4,是先将7或4强转为小数。结果就是1.75;
//下列输出结果是?
System.out.println(10%3);
System.out.println(10%-3);
System.out.println(-10%3);
System.out.println(-10%-3);
结果:1、1、-1、-1
10/3=3……1
10/-3=-3……1
-10/3=-3……-1
-10/-3=3……-1
1.2增量运算符 (+=,-=,*=,/=,%=)
a += 10;//--> a = a + 10;
b *= 10;//--> b = b * 10;
//其余以此类推;
增量运算符会自动进行类型转换
例如
1.3自增自减运算符(++、--)
(1)++,-- 为一元运算符(只需要一个操作数就能完成运算的运算符)
(2)++是变量+1,--是变量-1;
(3)前置++,是先加后用;后置++,是先用后减
int a1 = 3;
int b = a1++;
int a2 = 3;
int c = ++a2;
System.out.println("b = "+b+",c = " + c);
System.out.println("a1 = "+a1+",a2 = " + a2);
输出结果:
b = 3,c = 4
a1 = 4,a2 = 4
2.关系运算符
2.1六个关系运算符(<、>、==、!=、<=、>=)
(1)关系运算符是用来比较的,其结果为true/false
(2)当需要多次判断时,不能连着写,比如:1 < a < 5,应为:1 < a && a < 5
运算符 | 含义 | 示例 |
---|---|---|
< | 小于 | a < b |
> | 大于 | a > b |
== | 等于 | a == b |
!= | 不等于 | a != b |
<= | 小于或等于 | a <= b |
>= | 大于或等于 | a >= b |
3.逻辑运算符(重点)
3.1与或非
运算符 | 名称 | 说明 | 示例 |
---|---|---|---|
&& | 逻辑与 | 左右表达式全为真,则结果为真 | 布尔表达式a && 布尔表达式b |
| | | 逻辑或 |
左右表达式至少有一个为真,则结果为真
| 布尔表达式a | | 布尔表达式b |
! | 逻辑非 |
真变假,假变真。
| !布尔表达式a |
(1)逻辑运算符 的运算结果为Boolean类型(TRUE/FALSE)
3.2短路与
短路与:对于&&,如果左侧表达式为FALSE,表达式结果一定为FALSE,而右侧表达式不执行。
例如:
int a = 2;
int b = 4;
boolean c = (a > 5) && (b++ > 3);
System.out.println("b = " + b);
//运行结果:b = 4
所以 (b++ > 3) 这块代码并没有执行。否则b应该变成5;
3.3短路或
短路或:对于 | | ,如果左侧表达式为TRUE,表达式结果为TURE,右侧表达式也不执行;
例如:
int a = 2;
int b = 4;
boolean c = (a < 5) || (b++ > 3);
System.out.println("b = " + b);
//运行结果:b = 4
4.位运算符
四个位运算符( & 、|、 ~、^)
运算符 | 名称 | 说明 |
---|---|---|
& | 按位与 |
如果两个二进制位都是 1, 则结果为 1, 否则结果为 0
|
| | 按位或 |
如果两个二进制位都是 0, 则结果为 0, 否则结果为 1.
|
~ | 按位取反 |
如果该位为 0 则转为 1, 如果该位为 1 则转为 0
|
^ | 按位异或 |
如果两个数字的二进制位相同, 则结果为 0, 相异则结果为 1
|
4.1按位与(&)
例:
System.out.println(3&5);
//运行结果:1
因为3和5的二进制前28为都是0,所以只表示后4位。
如果两个二进制位都是 1, 则结果为 1, 否则结果为 0
3:0011;5:0101
3&5--> 0011&0101 -->0001 -->1;
因为只有绿色的1在3和5中都是1,按位与后任然为1,其他全为0;所以结果为1;
4.2按位或 (|)
System.out.println(3|5);
//运行结果:7
如果两个二进制位都是 0, 则结果为 0, 否则结果为 1
3|5--> 0011|0101 -->0111 -->7;
4.3 按位取反(~)
System.out.println(~(byte)3);
//运行结果-4
如果该位为 0 则转为 1, 如果该位为 1 则转为 0
3:0000 0011;
~3:1111 1100 最左面的1表示负数,故这是补码
1111 1100 取反,1000 0011 --》 +1得到原码 1000 0100
原码:1000 0100 —>-4
4.4按位异或(^)
System.out.println(3^5);
//运行结果: 6
如果两个数字的二进制位相同, 则结果为 0, 相异则结果为 1
3:0011; 5:0101;
3^5 --> 0011^0101 -->0110-->6
5.移位运算
运算符 | 名称 | 说明 |
<< | 左移 |
最左侧位不要了
,
最右侧补
0
|
>> | 右移 | 最右侧位不要了,最左侧补符号位(正数补0,负数补1) |
>>> | 无符号右移 |
最右侧位不要了
,
最左侧补
0.
|
(1)正整数左移 1 位, 相当于原数字 * 2. 左移 N 位, 相当于原数字 * 2 的N次方.(2)正整数右移 1 位, 相当于原数字 / 2. 右移 N 位, 相当于原数字 / 2 的N次方.(3) 由于计算机计算移位效率高于计算乘除 , 当某个代码正好乘除 2 的 N 次方的时候可以用移位运算代替 .(4) 移动负数位或者移位位数过大都没有意义 .(5)位移运算会将Byte,Short类型的数据提升为int类型,而int,long类型会保持不变
(6)位移运算不能对浮点类型运用。
6. 条件运算符(三目运算符)
表达式1 ? 表达式2 : 表达式3
当 表达式1 的值为 true 时, 整个表达式的值为 表达式2 的值;当 表达式1 的值为 false 时, 整个表达式的值为 表达式3 的值.
求a、b中的较大值
int c = a > b ? a : b;
7.运算符的优先级
以上运算符优先顺序不用死记硬背,不知谁的优先级高的话,加括号就行。