您的位置:首页 > 编程语言 > Java开发

Java学习第三天笔记

2013-03-02 17:07 169 查看
比较运算符:比较运算符运算肯定有结果,结果必须为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的图解,位移运算直接操作二进制数,效率较高。



 

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: