文章目录
- 一、算术运算符
- 二、关系运算符
- 三、逻辑运算符
- 四、赋值运算符
- 五、三元运算符
- 六、运算符的优先级
- 七、位运算
- (一)、原码 反码 补码
- (二)、位运算符
一、算术运算符
类型:
+ - * / % ++ - -
说明
- i ++ 表示先赋值再自增,++ i 表示先自增再赋值。
- i - - 表示先赋值再自减,- - i 表示先自减再赋值。
- %的本质可以看成一个公式:
a % b = a - a / b * b
例:10 % 3 = 1
10 % -3 = 1
-10 % 3 = -1
-10 % -3 = -1
二、关系运算符
关系运算符的结果都是boolean型,关系表达式常用在条件判断语句中。
类型:
相等:==
不等: !=
小于:<
大于:>
小于等于:<=
大于等于:>=
三、逻辑运算符
用于连接多个条件/表达式,最终结果也是boolean型。
类型:
逻辑与:&(同真为真)
逻辑或:|(有真为真)
异或:^(相同为真,不同为假)
短路与:&&(同真为真)
短路或:||(有真为真)
取反:!(真假互换)
说明
- &与&&区别:
a&&b,若a为false,那么b将不会进行判断;
a&b,无论a为true还是false,b都会判断。- | 与 || 区别:
a || b,若a为true,那么b将不会进行判断;
a | b,无论a为true还是false,b都会判断。- 因此可以得出
为什么叫短路与/短路或
(走到第一步就被截断了),&&和||常用于条件判断,&和|常用于运算。
四、赋值运算符
基本赋值运算符:=
复合赋值运算符:+= -= *= /= %= 等
五、三元运算符
基本语法:
条件表达式?表达式1:表达式2;
运算规则:
若条件表达式为true,运算结果是表达式1;
若条件表达式为false,运算结果是表达式2。
六、运算符的优先级
优先级从上到下逐级递减;只有单目运算符(对一个变量运算,例:++a)、赋值运算符是从右到左的。
优先级方向 | 类型 | 运算符 |
. () {} ; , | ||
右>左 | 单目运算符 | ++ - - ~ ! |
左->右 | 算术运算符 | * / % |
左->右 | 同上 | + - |
左->右 | 位移运算符 | << >> >>> 位移 |
左->右 | 比较运算符 | < > <= >= instanceof |
左->右 | 同上 | == != |
左->右 | 逻辑运算符 | & |
左->右 | 同上 | ^ |
左->右 | 同上 | | |
左->右 | 同上 | && |
左->右 | 同上 | || |
左->右 | 三元运算符 | ?: |
右->左 | 赋值运算符 | = *= /= %= |
同上 | += -= <<= >>= | |
同上 | >>>= &= ^= |= |
七、位运算
(一)、原码 反码 补码
- 最高位为符号位:0表示正数,1表示负数。
- 正数的原、反、补码一样。
- 负数的反码 = 原码符号位不变,其他位取反(或者补码-1)。
- 负数的补码 = 原码符号位不变,其他位取反加一(或者反码+1)。
- 0的原、反、补码都是0。
- Java没有无符号数,即都是有符号数。
- 计算机运行时,以补码方式运算。
- 我们看结果时,看的是原码。
具体请参考其它博客,这里不做解释。
(二)、位运算符
右位移 >> :本质右移1位除2(低位溢出,符号位不变,高位用符号位补)
左位移 << :本质左移1位乘2(符号位不变,低位补0)
算术右位移 >>>(又称无符号右移,低位溢出,高位补0)
按位取反 ~
按位与 &
按位或 |
按位异或 ^