Java基础教程——运算符
运算符
算术运算符
加 | 减 | 乘 | 除 | 取余 | 自加 | 自减 |
---|---|---|---|---|---|---|
+ | - | * | / | % | ++ | -- |
public class 算术运算符 {
public static void main(String[] args) {
int 被除数, 除数, 商, 余数;
被除数 = 10;
除数 = 3;
商 = 被除数 / 除数;
余数 = 被除数 % 除数;
System.out.println("商:" + 商 + " 余数:" + 余数);
}
}
浮点数也能取余,把上述代码的int改为double:
商:3.3333333333333335 余数:1.0
另外,浮点数可以除以0:
商:Infinity 余数:NaN
比较运算符
> | < | ≥ | ≤ | = | ≠ |
---|---|---|---|---|---|
> | < | >= | <= | == | != |
位运算符
用于操作整数类型(char也算入)
按位与 | 按位或 | 按位异或 | 补码取反 | 左移 | 右移 | 无符号右移 |
---|---|---|---|---|---|---|
& | | | ^ | ~ | << | >> | >>> |
关于补码取反,参见:
位运算法则:
p | q | p&q(同1为1) | p|q(有1则1) | p^q(同0异1) |
---|---|---|---|---|
1 | 0 | 0 | 1 | 1 |
0 | 1 | 0 | 1 | 1 |
1 | 1 | 1 | 1 | 0 |
0 | 0 | 0 | 0 | 0 |
重点掌握:
- >> 右移(除以2^n)
- << 左移(乘以2^n)
public class 左移右移 {
public static void main(String[] args) {
int a;
a = 512;
System.out.println(a << 1);
System.out.println(a >> 1);
System.out.println(a >>> 1);
a = -512;
System.out.println(a << 1);
System.out.println(a >> 1);
System.out.println(a >>> 1);
}
}
对于int a=3,扩大8倍最快的方法是a<<3,即左移3位,相当于乘以23,计算机做位移的操作要被乘除快得多,比加法都快。
扩大2倍 | a<<1 | 缩小2倍 | a>>1 |
---|---|---|---|
扩大4倍 | a<<2 | 缩小4倍 | a>>2 |
扩大8倍 | a<<3 | 缩小8倍 | a>>3 |
扩大16倍 | a<<4 | 缩小16倍 | a>>4 |
逻辑运算符
用于操作bool类型
运算符 | 中 | 说明 |
---|---|---|
&& | 与 | AND,同真为真 |
|| | 或 | OR,一荣俱荣 |
! | 非 | NOT |
短路逻辑运算
以&&为例:
- 两个操作数都为true时,结果才为true;
- 第一个为false时,结果就必为false,这时不会再判断第二个操作
public class 短路逻辑运算 {
public static void main(String[] args) {
int a = 1;
if ((a < 0) && (a++ < 1)) {
// Do Nothing
}
System.out.println(a);
}
}
“短路逻辑运算”针对布尔类型数据,而位运算符针对整型数据。
运算符 | 说明 |
---|---|
& | 不短路与 |
| | 不短路或 |
赋值运算符
等号运算符(=)左侧只能是变量;右侧不一定。
连续赋值:a = b = 3;降低可读性,不推荐使用。
扩展的赋值运算符:(x+=2相当于x=x+2)
+= | -= | *= | /= | %= | ||
---|---|---|---|---|---|---|
&= | |= | ^= | <<= | >>= | >>>= |
推荐使用扩展的赋值运算符:①代码更简洁②效率较高
public class 赋值运算符 {
public static void main(String[] args) {
byte a = 1;
// 2是int,a+2自动提升为int类型
// 再赋值给a,需要显式转换一下
a = (byte) (a + 2);
System.out.println(a);
a = 1;
a += 2;
System.out.println(a);
}
}
运算符优先级
高 | 括号 | ( ) |
---|---|---|
单目运算符 | 自加、自减、~、! | |
算术运算符 | */% | |
加减(+-) | ||
位运算符1 | 位移(>>、<<、>>>) | |
比较运算符 | 大于小于 | |
等于·不等于 | ||
位运算符2 | 按位与 | |
按位异或 | ||
按位或 | ||
逻辑运算符 | && | |
|| | ||
三目运算符 | ?: | |
低 | 赋值运算符 | 含扩展赋值 |