今天再次捡起java基础,以前在校的时候很少用到取反操作。
TulipFestival_ZH-CN8467334837_1920x1080.jpg
当然和在学校划水有关,今天看到异或位运算符,^是异或,相同为0,不同为1,例如int x = 19^20,
19:0001 0011
20:0001 0100
可以看到二进制进行异或,答案是0000 0111,也就是x=7,那么在实际编写代码中有什么用呢?例如下面:
a ^ a = 0;
a ^ 0 = a;
a ^ b = b ^ a;
a ^ b ^ b = a;
假如两个数交换,最大众的写法是
int a=4,b=3;
int temp = a;
a = b;
b = temp
写法2:
a = a + b;
b = a - b;
a = a - b;
写法3:
a = a ^ b; // a = 4 ^ 3, b=3;
b = a ^ b; // a = 4 ^ 3, b = 4 ^ 3 ^ 3 = 4
a = a ^ b; // a = 4 ^ 3 ^ 4 = 3, b = 4;
写法4:
a = (a + b) - (b = a); //或者下面这种
a = (a ^ b) ^ (b = a);
以上写法都是实现两者的交换,在工作中第一种大众容易被别人理解,方法2是利用减法是加法的逆运算,方法3是利用异或操作 推荐面试或者笔试用第三种,当然第四种也可以。异或还可以在一堆数中找相同的,时间复杂度最小,空间复杂度也最小,因为是二进制位运算,开销最小。目前想到的就这些,以后学习到了新的 会再补充。