运算符分类
算术运算符
+:加法
- :减法
* :乘法
/ :除法
%:余数
++: 自加。这个如果放在左边,先自加1再运算;放右边先运算再自加1。
-- :自减。同上。
赋值运算符
比较简单就不多说了,赋个贴图看一下就好了。
位运算符
&:位与。二进制运算时当两位同时为1时返回1;否则返回0。
| :位或。当两位有一位为1时返回1。都不为1时返回0。
~ :位非。按位全部取反。
^: 位异或。当两位相同时返回0;不通时返回1。
<<:左移
>>:右移
>>>:无符号右移,左侧补0.
举几个例子,以int类型为例8byte32位:
a = 49:0000 0000 0000 0000 0000 0000 0011 0001
b = 15:0000 0000 0000 0000 0000 0000 0000 1111
c=5:0000 0000 0000 0000 0000 0000 0000 0101
d=-5:1111 1111 1111 1111 1111 1111 1111 1011
d>>>2 = 1073741822 : 0011 1111 1111 1111 1111 1111 1111 1110
a>>2:0000 0000 0000 0000 0000 0000 0000 1100
a<<2:0000 0000 0000 0000 0000 0000 1100 0100
a^b:0000 0000 0000 0000 0000 0000 0011 1110
~a:1111 1111 1111 1111 1111 1111 1100 1110
a|b=15: 0000 0000 0000 0000 0000 0000 0000 1111
a&b=1:0000 0000 0000 0000 0000 0000 0000 0001
这个地方比较混乱,如果有错误,还请指正。
比较运算符
>;>=;<=;<;==;!= 返回类型为boolean。一边用于条件判断。
逻辑运算符
&&:逻辑与。前后必须都返回true,才能返回true。否则返回false。
&:逻辑不短路与。
||:逻辑或。前后只要有一个返回true,就可以返回true。否则返回false。
|:逻辑不短路或。
!:逻辑非。true->false; false->true。
^:异或。两个操作数不同时返回true。相同时返回false。
三目运算符
举个例子:
x==null?"0":x.toString();
单目运算符
包括++,--,~,!
运算符的优先级
今天其实本来没想写这个,但是今天看了一遍hashcode,直接看到Map源码。map中应用了一些位运算符。所以还是要搞懂基础的内容才方便看下去。所以今天先把这块内容写一下。方便后面理解。