目录
1、数学运算符
- 算数运算符
+、-、*、/、%、++、--
- 赋值运算符
=、+=、-=、*=、/=、%=
2、关系运算符
- 比较运算符
<、>、=、<=、>=、==、!=
- 逻辑运算符
与(&&)、与(&)、或(||)、或(|)、非(!)
3、条件运算符/三元运算符
布尔表达式 ? 表达式1 :表达式2
4、位运算
与(&)、或(|)、异或(^)、反码(~)、移位处理(<<、>>、>>>)
注意
- 算数运算符中,0不能作为除数
- 在逻辑运算符中,&&、& 和 ||、| 的区别是:&&、|| 具有短路功能,&、| 没有
- 异或运算(^)规则:两个数转为二进制,然后从高位开始比较,如果相同则为0,不相同则为1
- 按位与运算(&)规则:两个数都转为二进制,然后从高位开始比较,如果两个数都为1则为1,否则为0
- 按位或运算(|)规则:两个数都转为二进制,然后从高位开始比较,两个数只要有一个为1则为1,否则就为0
- 按位异或(^)规则:两个数都转为二进制,然后从高位开始比较,两个数同时为0或1时,结果为0,否则为1
- 位非(按位取反)运算(~)规则:如果位为0,结果是1,如果位为1,结果是0
在Java中,所有数据的表示方法都是以补码的形式表示,如果没有特殊说明,Java中的数据类型默认是int,int数据类型的长度是8位,一位是四个字节,就是32字节,32bit.
例:37转为二进制是100101,补码后为:00000000 00000000 00000000 00100101
取反为:11111111 11111111 11111111 11011010
因为高位是1,所以原码为负数,负数的补码是其绝对值的原码取反,末尾再加1。
因此,我们可将这个二进制数的补码进行还原:首先,末尾减1得反码:11111111 11111111 11111111 11011001 其次,将各位取反得原码:00000000 00000000 00000000 00100110,
此时二进制转原码为38。
所以~37 = -38.
- 左移(<<):就是将运算符左边的操作数的二进制数据按照运算符右边操作数指定的位数向左移动,右面移空的部位补0。一个数左移n,相当于这个数乘以2的n次方
- 右移(>>): 就是将运算符左边的操作数的二进制数据按照运算符右边操作数指定的位数向右移动,如果高位是0,左侧被移空的高位就填入0,如果高位是1,左侧被移空的高位就填1
例:101100 >> 1 = 110110 001101 >> 1 = 000110
- 无符号右移(>>>):无论高位是0还是1,左侧被移空的高位都填入0
运算符由高到低的顺序
1、增量和减量运算 -> 算术运算符 -> 比较运算符 -> 逻辑运算符 -> 赋值运算符
2、如果两个运算有相同的优先级,那么左边的表达式要比右面的表达式优先被处理。
运算符优先级
优先级 | 描述 | 运算符 |
1 | 括号 | () |
2 | 正负号 | +、- |
3 | 一元运算符 | ++、--、! |
4 | 乘除、取余 | *、/、% |
5 | 加减 | +、- |
6 | 移位运算 | >>、<<、>>> |
7 | 比较大小 | <、>、<=、>= |
8 | 比较是否相等 | ==、!= |
9 | 按位与运算 | & |
10 | 按位异或运算 | ^ |
11 | 按位或运算 | | |
12 | 逻辑与运算 | && |
13 | 逻辑或运算 | || |
14 | 三元运算符 | ? : |
15 | 赋值运算符 | = |