1、算数运算符
+ :加法 (++自加)
- :减法 (--自减)
* :乘法
/ :除法
% :取余运算
2、关系运算符
< :只能比较基本类型数据之间的关系,不能比较对象之间的关系。
> : (同关系运算符“<”)
<=: (同关系运算符“<”)
>=: (同关系运算符“<”)
==:若使用该运算符比较两个对象的引用(变量),则实质上是比较两个变量是否引用了相同的对象。所谓 相同的对象是指,是否是在堆栈(Heap)中开辟的同一块儿内存单元中存放的对象。
!=:(同关系运算符“==”)
3、逻辑运算符 (操作符只能是布尔类型的)
& ADND(与) false&true == false
&& AND(短路) false&&true == false
| OR(或) false|true == true
|| OR(短路) false||true == true
! NOT(非) !true == false
^ XOR(异或) true^false == true
注意:
逻辑运算符用于连接布尔型表达式。在Java中不同于数学的逻辑表达 3<X<5 ,java 中应该写成 x>3 & x<5
"&" 和"&&" 的区别:
单个"&",左边无论真假,右边都进行计算。
双个"&",左边为假,右边不进行计算。
"|"和"||" 的区别:
单个"|",左边无论真假,右边都进行计算。
双个"|",左边为真,右边不进行计算。
"|"和"&" 做位运算:
二进制进行|位运算,只有0|0时候为0,其他为1,比如6|5 先把6和5换成二进制。6的二进制为110,5的二进制为101那么用位运算0|0得0只要有1得1,算出为111,111换成十进制为7,所有6|5等于7
二进制进行&位运算,只有1&1得1,其他得0,同理可得6&5算出二进制得100,100换成十进制为4
"^"异或运算和"~"反码:
任何相同二进制异或运算都得0,1^1=0,0^0=0,不相同的异或运算都得1,1^0=1,0^1=1。同理6^5的011那么011的十进制是3。提示一个数异或两次变回本身。比如6^5^5的 110,101,101。先得011,再得110所有又变回原来的数值,此技巧可以用来转换数值,不需要第3个变量即可两个变量值互转。
反码:二进制进行反码计算时。1变成0,0变成1。举例子~6,6的二进制是110在机器上补足32位在110之前补码0。那么反码为111.....001,此时的反码减去1得111.....111000,那么原反码减去相减的码得到0000....000111此时的十进制为-7那么加上原来减去的1得到-7+1就是~6了。
5、移位运算符(只能处理整数运算符)
Char、byte、short类型,在进行移位之前,都将被转换成int类型,移位后的结果也是int类型;移位符号右边的操作数只截取其二进制的后5位(目的是防止因为移位操作而超出int类型的表示范围:2的5次方是32,int类型的最大范围是32位);对long类型进行移位,结果仍然是long类型,移位符号右边的操作符只截取其二进制的后6位。
<< :左移
>> :右移,若符号位为正,则在最高位插入0;若符号位为负,则在最高位插入1
>>> :无符号右移,无论正负,都在最高位插入0
移位示例:
public class Demo { public static void main(String[] args) { // 0000 0000 0000 0101 // 0000 0000 0000 0010 System.out.println(5>>1);//2 // 0000 0000 0000 1000 // 0000 0000 0000 0100 System.out.println(8>>1);//4 System.out.println(3+5>>1);//4 System.out.println(3+(5>>1));//5 } }