轉載——大牛青春起點...Java第二課學習..

位運算符:


(1)>> (a >>b)相當於a / (2的b次冪)注意取整,右移後,原來高位是什麼,就用什麼來補充空下的高位


(2)<< (a << b) 相當於 a * (2的b次冪):


(3)>>> 3>>>1 = 1 ;-> 3/2 = 1 ;與>>不同的是,右移後,不管原來高位是什麼,都用0來補充空下的高位,PS:無<<<
PS:移位運算符,默認是模32的運算,除非左邊的操作數是long,那麼這種情況下是模34位運算,所以1<<35 的答案 和1<<3|8 的結果是一


樣的,都是8;




(4)&:與運算:(6 & 3) = 2
6的二進制  110 ,實際上在內存中的存儲是  0000—0000 0000—0000 0000—0000 0000—0110 
3的二進制  011, 實際上在內存中的存儲是  0000—0000 0000—0000 0000—0000 0000—0011
簡寫:
 110
&011
-----
 010(同真則真原則)
2的二進制就是 010 ,所以(6 & 3) = 2;


(5)| :或運算 (6 | 3) = 7
6的二進制  110 ,實際上在內存中的存儲是  0000—0000 0000—0000 0000—0000 0000—0110 
3的二進制  011, 實際上在內存中的存儲是  0000—0000 0000—0000 0000—0000 0000—0011


簡寫:
 110
|011
-----
 111 (有真則真原則)


7 的二進制就是 0000—0000 0000—0000 0000—0000 0000—0111




(6)^ 異或運算:(6 ^ 3) = 5  (6 ^ 3 ^ 3 )  = 6(PS:一個數異或同一個數兩次,結果是數本身)


6的二進制  110 ,實際上在內存中的存儲是  0000—0000 0000—0000 0000—0000 0000—0110 
3的二進制  011, 實際上在內存中的存儲是  0000—0000 0000—0000 0000—0000 0000—0011
簡寫:
 110
^011 (不同則真)
-----
 101
5的二進制 0000—0000 0000—0000 0000—0000 0000—0101


故,^ 可運用於加密,如很多二進制數 ^ 3(未知數) 後二進制數值,發生變化,如果想得到原來的二進制數(解密),再 ^ 3,即可。
但是真正的加密,是經過複雜算法的。


(7)~ (反碼): 01001 ~ 後 10110,即1變0 , 0變1


(~6) = -7
  -6 = -7 + 1;
(~8) = -9:-8 = -9 + 1;
(~16) = -17:-16 = -17 + 1;
 (~a)先把a變爲-a,-a - 1 = (~a);


題目:用高效的方法算出 2*8=?
2的二進制 0010
8的二進制 1000


         0010
        *1000
        -----
         0000
        0000
       0000
      0010
    -----------
      0010000


16的二進制就是 10000,所以效率慢,2*8 -> 2<<3


|000000000000000000000000000000000010| 左移 -> 000|000000000000000000000000000000010   | 


用0補低位 -> |000000000000000000000000000000010000|  


邏輯運算符:

&
特點:同真則真,其餘爲假,a&b ,a和b都參與運算


|
特點:有真則真,其餘爲假,a|b ,a和b都參與運算


^:異或:不同則真,其餘爲假,假設a = 3;( 2<a ^ a<5) 結果:false; a = 3 (a<2 ^ a<1)true


&& (短路):和&運算結果是一樣,只是運算過程不一樣,從左往右判斷,有一個爲假,剩下的不再參與運算


|| (短路) 和|運算結果是一樣,只是運算過程不一樣,從左往右判斷,有一個爲true,剩下的不再參與運算,結果必爲true


!   !true 則false ,!false則true,!!true 則true


三元運算符?:

(表達式1)?(表達式2):(表達式3)

(表達式1爲true)執行表達式2,否則執行表達式3

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章