常见的运算符:
- 关系(比较)运算符
- 逻辑运算符
- 自增自减运算符
- 赋值运算符
- 三目运算符
- 移位运算符
关系运算符
关系运算符,是将两个数进行比较,最终结果是一个 boolean 类型的值(true 或者 false),作为条件判断语句的条件来执行,有以下几种:
>=
- <=
- ==
- !=
>
<
逻辑运算符
即是进行逻辑判断,两个或更多条件之间的关联关系
常见的有 &&、||、!(与,或,非)
与运算
其中 && 是并且的意思
我们更多的是使用逻辑运算符配合关系运算符来使用例如:
int a = 1;
int b = 2;
int c = 3;
if(a < b && a < c) {
System.out.println("a 是三个数字中最小的一个");
}
这里的 &&
即与运算符,只有两边的比较运算符同时返回 True 才会返回 True 进而执行 if 条件语句中的代码,否则只要有其中一个或两个不满足条件就会返回 False。
或运算
|| 或运算相比 && 与运算的判断条件相对宽松
使用之前与运算的代码,这样可以更好的比较两者的区别
int a = 1;
int b = 2;
int c = 3;
if(a < b || a > c) {
System.out.println("a 可能是三个数字最小的那一个");
}
注意看这里的措辞,a 可能是最小的数字,为什么?
因为我们无法判断条件中的 a < b 还是 a > c 那一个返回 True 可能两者中的一个也可能是两个同时返回 True,但这里我们已经知道各个变量值的情况下,可以看到 a > c 是不满足条件的,但是由于 a < b 满足条件因此 True || False == True,进入到 if 条件判断中执行代码。
接下来就是非运算
! 非运算
! 运算的作用就是对值进行取反
! 运算可以操作 boolean 值
将 True 改为 False
False 改为 True
boolean flag = false;
if(!flag) {
System.out.println("听我说谢谢你...");
}
这里设置了 flag 的值为 false,但是我们可以将他进行取反,获得 True 进而执行 if 条件中的代码。
短路与,或
这里的短路即执行单边运算,比如如果 false & false 当执行到第一个 false 后就不会接着向下去执行了,因为根据与运算的特性,一个 false 整体就是 false,同理 true | true 也是当执行了第一个 true 之后就不会继续向下执行了,因为一个为 true 即使之后的条件为 false 返回的结果也同样为 true,这是由或运算的性质决定的,因此这样的书写形式可以对代码进行简化,提高代码的运行效率。
在实际写代码的过程中,应当根据需要选择使用常规 &&、|| 或是 短路 &、|
自增自减运算符
++、–
即对原有的值进行 +1、-1 的操作
值得注意的是:
a++、++a 虽然都是对 a 进行加 1 的操作,但是代码执行的顺序确是有所不同的,其中 a++ 是对之后的 a 进行 +1 操作 打印 a++ 值不会发生变化,但是 ++a 是对当前的值进行增加,打印 ++a 的值会立即发生变化
他们就类似于 a=a++ 但是因为 ++ 运算符的优先级是要低于 = 因此会先进行赋值,然后再对 a 进行 +1 的操作
因为 ++a 的前++ 的运算符优先级要高于 = 因此会先进行自加,然后将自加后的值,再将值赋给等号左边的值。
赋值运算符
=
注意:这里的等号和我们数学中的等号是不同的,数学中的 = 代表 a = 1,也就是 a 的值为 1,而我们这里的 a = 1,意思是将 1 赋值给 a 这个变量。
+=
例如:a+=1
就是 a = a + 1 的简化形式
*=
a *=
2
就是 a= a * 2
/=
a /= 2
就是 a = a / 2
%=
a %=2
就是 a = a%2
这里的 % 是取余的意思,比如在数学中 10 % 8 = 1…2
在编程中 10 % 8 获得的值就是后面的余数 2。
三目运算符
表达式? 结果1:结果2
三目运算符就是 if else 的简化形式
int a = 1;
if(a == 1) {
System.out.println("a 等于 1");
} else {
System.out.println("a 不等于 1");
}
这段代码用三目运算符进行简化就可以写为
int a = 1;
String s = a == 1?"a 等于 1":"a 不等于 1";
System.out.println(s);
移位运算
移位运算是计算机底层的运算规则,CPU 所有的运算都是基于移位运算,移位的效率比其它运算的效率高
& 按位与
| 按位或
~ 按位取反
^ 异或
箭头指向那里就是向那里移动
>>
右移运算(有符号)
对 -20 进行移位运算(---
下面的,应该是反码之后,和补码之后的值)
<<
左移运算
我们可以观察到,将 -20 向右移动时,得到的结果 5 刚好等于 -5 也就是 -20 / 4 = -5
将 -20 向左移动时,得到的结果为 -80 也就是 -20 * 4 = -80
>>>
无符号右移
无符号右移动,也就是向右移动不带有符号。
同样是 -20 的例子
>>>
表示无符号右移,也叫逻辑右移,即若该数为正,则高位补0,而若该数为负数,则右移后高位同样补0
可见无符号右移对于正数没有的效果和普通的 >> 右移一样,但是对于负数在移位中补0,会导致负数变为正数。
面试题:如何将 2 以效率最高的方式变为 8?
答:>>
右移两位即可。