Java 基礎知識-(面試題之位運算子)
public class test { public static void main(String[] args) { System.out.println(6 & 3); //輸出結果:2 System.out.println(6 & 2); //輸出結果:2 System.out.println(6 | 3); //輸出結果:7 System.out.println(6 | 2); //輸出結果:6 System.out.println(6 ^ 3); //輸出結果:5 System.out.println(6 ^ 2); //輸出結果:4 System.out.println(~6); //輸出結果:-7 } }
分析走一波:
知識點:
&:有0則0
|:有1則1
^:相同則0,不同則1
~:按位取反
6 & 3 6 & 2
110 (6的二進位制) 110 (6的二進位制)
& 011 (3的二進位制) & 010 (2的二進位制)
—————— ——————
010 010
6 | 36 | 2
110 (6的二進位制) 110 (6的二進位制)
| 011 (3的二進位制) | 010 (2的二進位制)
—————— ——————
111 110
6 ^3 6 ^ 2
110 (6的二進位制) 110 (6的二進位制)
^ 011 (3的二進位制) ^ 010 (2的二進位制)
—————— ——————
111 110
~6
00000000 00000000 00000000 00000110 6的原碼,反碼補碼都是本身。
11111111 11111111 11111111 11111001 對6取反。(這是某個數的補碼)
- 00000000 00000000 00000000 00000001 -1
——————————————————————
11111111 11111111 11111111 11111000 反碼
10000000 00000000 00000000 00000111 最高位為符號位,值為7,即結果為-7
面試題:
不採用第三方變數的情況下,交換兩個變數的值。
public class test { public static void main(String[] args) { int x = 2; int y = 3; x = x ^ y; //2 ^ 3 y = x ^ y; //2 ^ 3 ^ 3 x = x ^ y; //2 ^ 3 ^ 2 System.out.println(x); System.out.println(y); } }