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