java之运算符
1.1 运算符的优先级
- 数学运算、字符串连接运算。
% 取余 判断是否能整除,要看余数是否为0。
== 比较是否相等。
!= 比较是否不相等。
&& 逻辑与:左侧是真,并且右侧是真,结果才是真,只要有假结果就是假。也称短路与左侧是假,右侧被忽略不执行。
|| 逻辑或:左侧是真,或者右侧是真,结果都是真。两边都是假,结果才是假。也称短路或左侧是真,右侧被忽略不执行。
! 非:非真是假,非假是真。可以做相反的条件判断,如果“非a”是真,即判断a是假。例如:
if(!a) {
}
& 位与:两位都是1,结果才是1。
| 位或:有1,结果就是1。
^ 异或:不同是1。
~ 求反:1变0,0变1。
(>>) 带符号右移位:符号位是0,补0,符号位是1,补1。
(>>>)不带符号右移位:不管符号位是0还是1,都补0。
(<<) 左移位:与右移位逻辑一样。
(++ --)自增、自减。
(?:)三项运算符:1 ? 2 : 3判断第1项的真假、真运算2 假,运算3。
= 赋值运算。
(+= 、&= 、>>=)复合的赋值运算符:例如:a += 3; a= a+3;
会自动转型:例如:byte a=3;a = (byte) (a+3);
a += 3;
a += 3.14;
():转型运算符。
**运算符的优先级:**不用记优先级高低,用时加括号加括号加括号。
位运算:
移位运算,不对原值修改,而是新分配内存空间,来保存移动的结果。
00000000000000000000000010111011 >>2 带符号右移2位
00000000000000000000000000101110
10000000000000000000000010111011 >>2
11100000000000000000000000101110
00000000000000000000000010111011 >>>2 无符号右移3位
00000000000000000000000000101110
10000000000000000000000010111011 >>>2
00100000000000000000000000101110
10000000000000000000000010111011 <<2
00000000000000000000001011101100
00000000000000000000000010111011
00000000000000000000000001100101 & 两位都是1结果才是1
00000000000000000000000000100001
00000000000000000000000010111011
00000000000000000000000001100101 | 有1就是1
00000000000000000000000011111111
00000000000000000000000010111011
00000000000000000000000001100101 ^ 不同是1
00000000000000000000000011011110
00000000000000000000000010111011 ~ 取反 1变0 、0变1
11111111111111111111111101000100
左移1位,可以作为*2运算。
右移1位,可以作为/2运算。
~求反
整数正负补码
int a = …
~a+1 == -a