1. 算術運算符:
除号:整数在使用除号操作时,得到的结果仍为整数(小数部分忽略)。
取模:模数(%右边的数)的符号忽略不计,结果的正负取决于被模数(%左边的数)。
自增:符号在前就是先运算后取值,符号在后则是先取值后运算。
a . 放在操作数前面,则先自加或自减,再参与运算;
b. 放在操作数后面,则先参与运算,再自加或自减。
c. 示例:第一个括号中,x先参与运算取值5,再自加,此时x=6, 第二个括号中x先自加,此时x=7; 再按7参与运算;
第三个括号为7*10,所以最终结果就是5+7+70=82.
int x = 5;
int y = (x++) + (++x) + (x*10);
2. 邏輯運算符
& 两边都为true结果才为true,只要有一边是false,结果就是false
| 两边都为false结果才为false,只要有一边是true,结果就是true
^ 判断两边是否不同,不同则为true,相同则为false
! 取反,!true结果是false,!fasle结果是true
&& 和&结果相同,具有短路效果,如果前半是false,表达式结果一定为false,不运行后一半
|| 和||结果相同,具有短路效果,如果前半是true,表达式结果一定为true,不运行后一半
3.位運算符:
任何信息在计算机中都是以二进制的形式保存的,&、|、^除了可以作为逻辑运算符,也可以做为位算符。
它们对两个操作数中的每一个二进制位都进行运算,0当做false,1当做true。
& 将两个二进制数每一位进行与运算,两边都为1结果才为1,只要有一边是0,结果就为0。
比如:判斷6的第2位是0還是1, 6(0110)&2(0010) 這樣運輸會把第二位之外的其他位數據置爲0,
0110 & 0010 =0010(2) 結果大於0即爲1,結果等於0即為0
| 将两个二进制数每一位进行或运算,两边都为0结果才为0,只要有一边是1,结果就为1。
^ 将两个二进制数每一位进行异或运算,只要两边不同结果就为1,相同则为0。
异或两次为原数:m=n^m^m;
我们可以对数据按二进制位进行移位操作,java的移位运算符有三种:
<< 左移 将二进制的每一位向左移,低位补0。左移几位就相当于乘以2的几次方。
比如:6(0110)<<2 0000 0110(十進制6)右移兩位后:0001 1000(十進制24),相當於6乘以2的2次方=24
>> 右移 将二进制的每一位向右移,原来高位是0就补0,原来高位是1就补1。右移几位就相当于除以2的几次方。
比如:12(1100)>>2 0000 1100(十進制12)右移兩位后:0000 0011(十進制3),相當於12處以2的2次方=3
>>> 无无符号右移 将二进制的每一位向右移,高位补0。正数移动没区别,负数移动后变为正数。
~ 取反 0变1,1变0
4.运算符优先级
java运算符优先级记忆口诀
尊重原创:(口诀)转自https://www.cnblogs.com/zjfjava/p/5996666.html
单目:单目运算符+ –(负数) ++ -- 等
乘除:算数单目运算符* / % + -
为:位移单目运算符<< >>
关系:关系单目运算符> < >= <= == !=
逻辑:逻辑单目运算符&& || & | ^
三目:三目单目运算符A > B ? X : Y
后:无意义,仅仅为了凑字数
赋值:赋值=
单目乘除为关系,逻辑三目后赋值。