比较运算符
== != > >= < <= instanceof
注意:比较运算符的结果都是boolean型,结果只有true或false
而instanceof用于检查是否是类的对象
例如 “Hello” instanceof String 结果是true
逻辑运算符
& ! | ^ && ||
逻辑运算符用于连接两个boolean类型的表达式
&:AND(与)
只要两边有一个为假时,结果为假
仅当两边都为真时,结果为真
|:OR(或)
只要两边有一个为真时,结果为真
仅当两边都为假时,结果为假
^:OR(异或)
当两边相同时,结果为假 如:true ^ true =false false ^ false =false
当两边不同时,结果为真如:flase ^ true =truetrue ^ false =true
!:NOT(非)
非假为真,非真为假
&&:AND(短路与)
运算结果与 & 相同
运算过程不同:
& 无论两边结果如何,两边表达式均参加运算
&& 当左边的结果为假时,右边的表达式不参加运算,即跳过(短路)
||:OR(短路或)
运算结果与 | 相同
运算过程不同:
| 无论两边结果如何,两边表达式均参加运算
|| 当左边的结果为真时,右边的表达式不参加运算,即跳过(短路)
位运算符
& | ^ ~ >>> >> <<
位运算是直接对二进制进行运算
注意:位运算中0为假,1为真。按位对齐运算。
&:与运算
如 6 & 3 = 2
实际过程为
0000-0000 0000-0000 0000-0000 0000-0110
& 0000-0000 0000-0000 0000-0000 0000-0011
= 0000-0000 0000-0000 0000-0000 0000-0010
= 2
为了方便书写,可写成
0110
&0011
=0010=2
|:或运算
特点:凡是有效位(1是有效位),全保留
如 6 | 3 = 7
0110
| 0011
=0111=7
^:异或运算
特点:一个数异或同一个数两次,结果还是这个数。可用于加密解密。
如 6 ^ 3 =5
0110
^ 0011
=0101 =5
0101
^0011
=0110 =6
~:反码
即取反再加一
~6 = -7 即-7+1=-6
原码0000-0000 0000-0000 0000-0000 0000-0110
取反1111-1111 1111-1111 1111-1111 1111-1001
加一1111-1111 1111-1111 1111-1111 1111-1010
注:可参考java学习笔记(1)负数的二进制
<<:左移
相当于乘以2的倍数
如 3<<2= 意为3左移2位
0000-0000 0000-0000 0000-0000 0000-0011
移位0000-0000 0000-0000 0000-0000 0000-1100 =3*2^2=12
即整体向左移位超出的舍去,低位缺位的补0
例:最有效率的计算2*8
2*8=2<<3=16
即位运算最有效率
>>:右移
相当于除以2的倍数
与左移同理,整体右移,超出的位舍去,高位缺位的补原来高位的值,即保证符号位存在
>>>:无符号右移
数据进行右移时,无论原高位是什么值,高位空位均补0
注意:移n位,就是对乘以或除以2的n次幂
补充例:交换变量a,b的值
方法一:
定义第三方变量c,开发时首选,可读性强
int c;
c=a;
a=b;
b=c;
方法二:
注意当两个数过大时,超出int范围,会发生强制转换,造成数据丢失
a=a+b;
b=a-b;
a=a-b;
方法三:
进行位运算,可读性差,往往用于面试
a=a^b;
b=a^b;
a=a^b;
原理:一个数异或同一个数两次,结果还是这个数。