目录
一、算术运算符
1.基本四则运算符(+ - * / %)
基本四则运算符其实就是最简单的加减乘除模
int a = 20;
int b = 10;
System.out.println(a + b); // 30
System.out.println(a - b); // 10
System.out.println(a * b); // 200
System.out.println(a / b); // 2
System.out.println(a % b); // 0 --->模运算相当于数学中除法的余数
【1】除(/)
在除法操作时,右操作数不能为0
int a = 1;
int b = 0;
System.out.println(a / b)
// 运行结果
Exception in thread "main" java.lang.ArithmeticException: / by zero
at Test.main(Test.java:5)
浮点数的除法运算需采用浮点类型进行运算
int a = 3;
int b = 2;
// 在数学中应该是1.5 但是在Java中输出结果为1 会向下取整,即小数点之后全部舍弃掉了
System.out.println(a / b);
// 如果要得到数学中的结果,可以使用如下方式
/*
方式一:让变量 a 乘 1.0,使得a由int类型提升为double类型
然后除以b,结果为double类型 再用double类型的变量d接收
*/
double d = a * 1.0 / b;
System.out.println(d);
/*
方式二:直接将变量a强制类型转化为double,然后除以b,
结果为double类型 再用double类型的变量d接收
*/
double d = (double)a / b
System.out.println(d);
【2】模(%)
大家最不熟悉的应该就是模,实际上模运算就相当于数学中除法的余数
int a = 20;
int b = 3;
//这里取模 其实也就是 20/3 的余数
System.out.println(a % b); //结果为2
int c = 2;
//这里取模 其实也就是 20/2 的余数
System.out.println(a % c); //结果为0
在取模操作时,右操作数不能为0
int a = 1;
int b = 0;
System.out.println(a % b)
// 运行结果
Exception in thread "main" java.lang.ArithmeticException: % by zero
at Test.main(Test.java:5)
当然,取模操作也可以对double类型数据使用,但是没有什么意义,一般是对int类型数据取模
double a = 11.5;
double b = 2.0;
System.out.println(a % b); //结果为1.5
【3】类型提升
// +的左侧是int,右侧是double,在加之前int被提升为double
System.out.println(1+0.2);
// 故:输出1.2
【4】小贴士
- 基本四则运算符都是二元运算符,使用时必须要有左右两个操作数
- int类型数据 除以 int类型数据 还是int类型数据,并且会向下取整,自动舍去小数
2.增量运算符(+= -= *= %=)
int a = 6;
a += 2; // 相当于 a = a + 2
System.out.println(a); // 输出8
a -= 1; // 相当于 a = a - 1
System.out.println(a); // 输出5
a *= 3; // 相当于 a = a * 3
System.out.println(a); // 输出18
a /= 3; // 相当于 a = a / 3
System.out.println(a); // 输出2
3.自增/自减运算符(++ --)
int a = 1;
// 后置++ 表示给a的值加1,此时a的值为2
a++;
// 注意:后置++是先使用变量原来值,表示式结束时给变量+1,因此输出2
System.out.println(a++); // 输出2
System.out.println(a); // 输出3
// 注意:此时a的值为3
// 前置++ 表示给a的值加1
++a;
// 注意:前置++是先给变量+1,然后使用变量中的值,因此输出5
System.out.println(++a); //输出5
System.out.println(a); // 输出5
// --操作符给操作-1,与++含义类似
PS:
- 如果单独使用,【前置++】和【后置++】没有任何区别
- 如果混合使用,【前置++】先+1,然后使用变量+1后的值,【后置++】先使用变量原来的值,表达式结束时给变量+1
- 只有变量才能使用自增/自减运算符,常量不能使用,因为常量不允许被修改
二、关系运算符
int a = 10;
int b = 20;
// 注意:在Java中 = 表示赋值,要与数学中的含义区分
// 在Java中 == 表示相等
// eg:if(a == b) 这里的表示 a是否等于b ==表示相等
System.out.println(a == b); // false
System.out.println(a != b); // true
System.out.println(a < b); // true
System.out.println(a > b); // false
System.out.println(a <= b); // true
System.out.println(a >= b); // false
PS:进行多次判断时不能连在一起,必须分开!
错误写法:1<a<4 Java和数学中是有部分区别的
三、逻辑运算符
1、逻辑与(&&)
简单来讲,逻辑与(&&)其实就可以直接理解成"并且"
语法规则:表达式1 && 表达式2 其中左右表达式必须是boolean的结果
eg:进入我们社团的同学必须成绩十分优异并且三观正
上述例子中,表达式1:成绩十分优异 表达式2:三观正
那么我们要想加入社团就必须同时满足两个条件
也就是让表达式1为true,并且表达式2也为true才行
也就是说逻辑与(&&):两个表达式都为真,结果才是真,只要有一个是假,结果就是假。
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);
2、逻辑或(||)
简单来讲,逻辑或(||)其实就可以直接理解成"或者"
语法规则:表达式1 || 表达式2 其中左右表达式必须是boolean的结果
eg:进入我们社团的同学高考语文必须120分以上或者高考数学130分以上
上述例子中,表达式1:高考语文成绩必须120分以上 表达式2:高考数学130分以上
那么我们要想加入社团仅仅满足一个条件就可以了
也就是让表达式1为true或者让表达式2为true
也就是说逻辑或(||):左右表达式至少有一个位真,则结果为真
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);
3、逻辑非(!)
简单来讲,逻辑非(!)其实就可以直接理解成"取反",也就是把真的变成假的,把假的变成真的
语法规则:!表达式 (注意,这里的感叹号是英文感叹号)
int a = 1;
// a == 1 为true,取个非就是false
System.out.println(!(a == 1));
// a != 1 为false,取个非就是true
System.out.println(!(a != 1));
4、短路求值
逻辑与(&&)和逻辑或(||)都遵守短路求值的规则
System.out.println(10 > 20 && 10 / 0 == 0); // 打印 false
System.out.println(10 < 20 || 10 / 0 == 0); // 打印 true
- 对于逻辑与(&&),如果左侧表达式的值为false,则表达式结果一定是false,无需计算右侧表达式!
- 对于逻辑或(||),如果左侧表达式的值为true,则表达式结果一定是true,无需计算右侧表达式!
四、位运算符
1、按位与(&)
int a = 10;
int b = 20;
System.out.println(a & b); // 输出0
2、按位或(|)
int a = 10;
int b = 20;
System.out.println(a | b); //输出 30
3、按位取反(~)
int a = 20;
System.out.println(~a); //输出-21
注意:按位取反时,将该位0转为1,1转为0后得到的是一个补码,我们需要对补码进行转换成原码才能得到我们的十进制数字!!!
补码转原码方法:符号位不变,该位0转为1,1转为0。然后+1就可以的到原码
4、按位异或(^)
int a = 10;
int b = 20;
System.out.println(a^b); // 输出30
五、移位运算
1、左移(<<)
最左侧位丢掉,最右侧位补0
int a = 10;
System.out.println(a << 1); // 输出20
2、右移(>>)
最右侧位丢掉,如果符号位为1那么最左侧补0,如果符号位为0那么最左侧补1
int a = 10;
System.out.println(a >> 1); // 输出5
3、无符号右移(>>>)
int a = 10;
System.out.println(a >>> 1); // 输出5
4、小贴士
六、条件运算符
// 求两个整数的最大值
int a = 10;
int b = 20;
int max = a > b ? a : b;
PS:
表达式2和表达式3的结果要是同类型的,除非能发生类型隐式转换
int a = 10;
int b = 20;
int c = a > b ? 1 : 2.0;
表达式不能单独存在,其生产的结果必须要被使用
nt a = 10;
int b = 20;
a > b? a : b; // 报错:Error:(15, 14) java: 不是语句
七、运算符的优先级
// 求a和b的平均值
int a = 10;
int b = 20;
int c = a + (b - a) >> 1;
System.out.println(c);
// 求a和b的平均值
int a = 10;
int b = 20;
int c = a + ((b - a) >> 1);
System.out.println(c);