轉載——大牛青春起點...Java第二課學習..
阿新 • • 發佈:2019-02-02
(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|
(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|