1. 程式人生 > >Java 基礎知識-(面試題之位運算子)

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);
	}
}