比较运算符:比较运算符运算肯定有结果,结果必须为true或false。
注意区别=和==,==是比较运算符,=是赋值运算符,完全不同。
逻辑运算符(逻辑指的是一种关系,与、或、异或、非)
逻辑运算符用于连接两个boolean类型的表达式,以说明这两个表达式的关系。
&:与运算。
运算特点:true & true 结果为true;
false & true 结果为false;
true & false 结果为false;
false & false 结果为false。
运算规律:&运算两边只要有一个是false,则结果肯定是false,只有两边都为true,结果才是true。
|:或运算。
运算特点:true | true 结果为true;
true | false 结果为true;
false | true 结果为true;
false | false 结果为false。
运算规律:|运算只要两边有一个是true,则结果肯定是true,只有两边都为false,结果才是false。
^:异或运算。和或运算有一点不同。
运算特点:true ^ true 结果为false;
true ^ false 结果为true;
false ^ true 结果为true;
false ^ false 结果为false。
运算规律:^符号两边布尔表达式运算结果相同,结果为false,两边运算结果不同时,结果为true。
!:非运算,判断事物的另一面。
运算特点:!true = false;
!false = true;
!!true = true;
!!false = false;
&&:双与运算(短路与)
和&运算的运算结果是一样的,但是运算过程有区别。
&:无论左边的结果是什么,右边都参与运算。
&&:当左边的结果为false时,右边不再参与运算,直接得出最终结果为false。
||:双或运算(短路或)
和|的运算结果是一样的,但是运算过程有区别。
|:不论左边的结果是什么,右边都参与运算。
||:当左边的结果为true时,右边不再在参与运算,直接得出最终结果为true。
&&和||相比&和|,运算效率相对较高,但是当右边表达式较为复杂,我们希望其参与运算时,我们使用&和|。
另外&和|常用与二进制位运算。
位运算符:
位运算符中&可以用来取一个数二进制的最后几位。
例如一个数&7(111)可以取到这数二进制最后三位,即这个数的八进制的最后一位。
一个数&15(1111)可以去到这个数二进制的最后四位,即这个数的十六进制的最后一位。
位运算符|的特点在于:可以把有效位(二进制中的1)保留。
位运算符^的特点在于:一个数异或同一个数两次,结果还是这个数。加密的基本原理。
位运算符~取反:一个数取反再+1,所得的结果是这个数的负数。
位移运算:
1 class OperateTest 2 { 3 public static void main(String[] args) 4 { 5 /* 6 需求1:用最具有效率的方式算出2*8的结果。 7 8 思路:数值运算最有效率的方式就是通过二进制位移运算来实现,8是2的三次幂,因此应该用<<来完成该需求。 9 */ 10 System.out.println("2*8="+(2<<3));//2<<3的意思即是将二进制的2向左位移3位,相当于2*2的3次幂。 11 12 13 14 /* 15 需求2:将两个整数的值进行互换 16 17 思路:1.借助第三方变量。 18 2.将两数想加赋给第一个值,再减第二个值以此类推,实现调换结果。 19 3.通过位运算符^异或的特性,一个数^操作另一个同样的数两次,所得结果还是这个数。进行调换。 20 */ 21 22 int a=3,b=5;//声明变量 23 System.out.println("a="+a+",b="+b); 24 25 //第一种思路,借助第三方变量。开发中使用此方法,虽然效率不是最高,但是便于阅读。 26 int c; 27 c=a; 28 a=b; 29 b=c; 30 System.out.println("a="+a+",b="+b); 31 32 33 //为了该练习演示,进行数值复位 34 a=3; 35 b=5; 36 //第二种思路 37 a=a+b;//a=3+5,a=8 38 b=a-b;//b=8-5;b=3 39 a=a-b;//a=8-3;a=5 实现两数互换,但是不要使用此方法,如果两个数很大,想加超范围,会发生强制转换,数据发生变化。 40 System.out.println("a="+a+",b="+b); 41 42 43 44 //为了该练习演示,进行数值复位 45 a=3; 46 b=5; 47 //第三种思路,此方法为二进制位操作,效率最高,面试中常遇到,但是不便于阅读,开发中并不推荐使用。 48 a=a^b; //a=3^5; 49 b=a^b; //b=(3^5)^5 , b=3; b发生了变化 50 a=a^b; //a=(3^5)^3 , a=5; a也发生了变化。完成对调。 51 System.out.println("a="+a+",b="+b); 52 } 53 }
上练习中需求1的图解,位移运算直接操作二进制数,效率较高。