目录
一:算术运算符
1.1基本四则运算符
1.2增量运算符
1.3自增、自减运算符
二:关系运算符
三:逻辑运算符
五:位运算符
5.1按位与
5.2按位或
5.3按位取反
5.4按位异或
六:移位运算符
七:条件运算符
八:运算符的优先级
基本四则运算符非常简单,只需注意以下几点即可:
- 都是二元运算符,使用时必须有两个操作数;
- int/int =int,结果向下取整;
- 做除法和取模时,右操作数不能为0;
- 两操作数类型不一致时,向类型大的提升。
该种类型运算符操作完成后,会将操纵的结果赋值给左操作数。
对于自增自减运算符,主要注意前置++(--)和后置++(--)的区别即可。只需记住下面这句话即可:
前置++:先使用,后++; 前置--:先使用,后--;
后置++:先++,后使用; 后置--:先--,后使用;
具体实例如下:
package test;
public class test {
public static void main(String[] args) {
int a = 1;
System.out.println(a++); // 注意:后置++是先使用变量原来值,所以这里输出1
System.out.println(a); // 此时a++执行完毕,再次输出a的值,输出2
int b=1;
System.out.println(++b); // 注意:前置++是++,后先使用变量的值,所以这里输出2
System.out.println(b); // 任然输出2
}
}
运行结果如下:
public class test {
public static void main(String[] args) {
int a = 1;
a++;
System.out.println(a);
int b=1;
++b;
System.out.println(b);
}
}
结论:
- 如果单独使用,【前置++】和【后置++】没有任何区别;
- 如果混合使用,【前置++】先+1,然后使用变量+1之后的值,【后置++】先使用变量原来的值,表达式结束时给变量+1;
- 只有变量才能使用自增/自减运算符,常量不能使用,因为常量不允许被修改。
其计算结果为true或者false,这个我们容易处理。
逻辑运算符主要有三个,运算结果都是 boolean类型。
对于”逻辑与”和“逻辑或”而言,表达式1和表达式2都是boolean类型的结果。
具体实例如下:
public class test {
public static void main(String[] args) {
int a = 1; int b = 2;
System.out.println(a == 1 && b == 2); // 左为真 且 右为真 则结果为真
System.out.println(a == 1 && b >=100); // 左为真 但 右为假 则结果为假
System.out.println(a > 100 && b == 2); // 左为假 但 右为真 则结果为假
System.out.println(a > 100 && b > 100); // 左为假 且 右为假 则结果为假
}
}
注意:短路求值
对于 && , 如果左侧表达式值为 false, 则表达式结果一定是 false, 无需计算右侧表达式。
对于 ||, 如果左侧表达式值为 true, 则表达式结果一定是 true, 无需计算右侧表达式。
& 和 | 如果表达式结果为 boolean 时, 也表示逻辑运算。但与 && || 相比, 它们不支持短路求值。
位操作表示按二进制位运算。计算机中都是使用二进制来表示数据的(01构成的序列), 按位运算就是在按照二进制位的每一位依次进行计算。
依次进行说明:
举例:
public class test{
public static void main(String[] args) {
int a = 10;
int b = 20;
System.out.println(a & b);
}
}
分析:
运行结果如下:
举例:
public class test{
public static void main(String[] args) {
int a = 10;
int b = 20;
System.out.println(a | b);
}
}
分析:
运行结果如下:
举例:
public class test{
public static void main(String[] args) {
int a = 10;
System.out.printf("%x\n", a);
System.out.printf("%x\n", ~a);
}
}
10按位取反之后变为一个负数,内存中存储的是二进制的补码,所以需要先转化为原码;符号位时1,说明该数为负, 所以通过补码得到源码后,结是-11。
运行结果如下:
举例:
public class test{
public static void main(String[] args) {
int a=10;
int b=20;
System.out.println(a^b);
}
}
运行结果如下:
<<左移:最左侧位不要了,最右侧补0;
>>右移:最右侧位不要了,最左侧补符号位;
>>>无符号右移:最右侧位不要了,最左侧补0。
移位运算符用的不多,稍作了解即可,以下是一些注意事项:
注意:
1. 左移 1 位, 相当于原数字 * 2. 左移 N 位, 相当于原数字 * 2 的N次方.
2. 右移 1 位, 相当于原数字 / 2. 右移 N 位, 相当于原数字 / 2 的N次方.
3. 由于计算机计算移位效率高于计算乘除, 当某个代码正好乘除 2 的N次方的时候可以用移位运算代替.
4. 移动负数位或者移位位数过大都没有意义.
当 表达式1 的值为 true 时, 整个表达式的值为 表达式2 的值;当 表达式1 的值为 false 时, 整个表达式的值为 表达式3 的值。是 Java 中唯一的一个三目运算符, 是条件判断语句的简化写法。
举例:
public class test{
public static void main(String[] args) {
int a=10;
int b=20;
int c=a>b?a:b;
}
}
注意:
- 表达式2和表达式3的结果要是同类型的,除非能发生类型隐式类型转换。
- 表达式不能单独存在,其产生的结果必须要被使用。
无需赘述,如有需要,增加括号即可。当然,最近基本的先乘除后加减等,应该知悉。
本节内容到此结束!