1.运算符的分类
运算符 | |
算术运算符 | + - * / % ++ -- |
赋值运算符 | =f\符合符号运算符(+= -= *= /=) |
逻辑运算符 | && || ! |
按位运算符 | | & ^ ~ >> >>> << |
关系运算符 | > < >= <= != == |
1.1位运算符
位运算符是对整数数值的二进制表示进行运算
1.1.1按位求反运算符~
正数 ~9:(0 1001——1 1010)符号位取反,末位加1,求反为-10;
负数~(-9):
转二进制:1 1001
计算补码:1 0111(负数补码,按位取反+1)
按位取反:0 1000
转为原码:0 1000(正数的原码是他本身)
求反为:8
1.1.2位与运算符
参与运算的两个操作数,相应的二进制数进行位与运算。
5&11: (0 0101& 0 1011)——(0 0001),结果为1。
1.1.3位或运算符|
参与运算的两个操作数,相应的二进制数进行位或运算。
5|11:(0 0101| 0 1011)——(0 1111),结果为15。
1.1.4位异或运算^
参与运算的两个操作数,相应的二进制数进行位异或运算,两个位相同为0,相异为1。
5^11:(0 0101^0 1011)——(0 1110),结果为14。
1.1.5保留符号位的右移运算符>>
将一个操作数的各个二进制位全部向右移若干位,这个位数由右操作数来决定,移到右端的操作数被舍弃,左边空出来的位全部用最高位的符号位来填充。
正数右移:5>>1(0 0101)
转为补码:0 0101(正数的补码是它本身)
右移:0 0010
转为原码:0 0010
结果为2;
负数右移:-9>>1 (1 1001)
转为补码:1 0111
右移:1 1011
转为原码:1 0101
结果为-5。
1.1.6保留符号位的右移运算符>>>
与>>不同的是,>>>右移后左边空出的位用0填充。5>>>1结果为2。-9>>>1结果为214748343。
总结1.1.5和1.1.6:
正数的保留和不保留符号位的右移和负数的不保留符号位的右移,就是相应的补码移位,在高位补0。
负数的保留符号位右移,高位补1,补码右移,转为原码。
1.1.7左移运算符<<。
将一个操作数的所有二进制相左移动若干位,右边空出的位置补0,若高位左移后溢出,则舍弃溢出的数。
5<<1:(0 0101)
右移:0 1010
结果为10。
2.运算符的优先级
优先级 | 运算符 | 简介 | 结合性 |
1 | 【】、、、() | 方法调用,属性获取 | 从左向右 |
2 | | 、~、++、-- | 一元运算符 | 从左向右 |
3 | *、/、% | 乘、除、取余 | 从左向右 |
4 | +、- | 加减 | 从左向右 |
5 | <<、>>、>>> | 左移位、右移位、无符号右移 | 从左向右 |
6 | <、<=、>、>=、instanceof | 小于、小于等于、大于、大于等于、对象类型判断是否属于同一类型 | 从左向右 |
7 | ==、!= | 两个值是否相等、两个值是否不等于 | 从左向右 |
8 | & | 按位与 | 从左向右 |
9 | ^ | 按位异或 | 从左向右 |
10 | | | 按位或 | 从左向右 |
11 | && | 短路与 | 从左向右 |
12 | || | 短路或 | 从左向右 |
13 | ? | 条件运算符 | 从左向右 |
14 | =、+=、-=、*=、/=、%=、&=、|=、^=、<、<=、>、>=、>>= | 混合赋值运算符 | 从左向右 |