异或运算的一些神奇操作
发表于 | 更新于
对异或印象最深刻的记忆还是大一下的数字逻辑课,可那时仅仅知道不同为1,最近又学到了异或运算,故作此文。
下面列出几个异或的常见性质
异或可以理解为无进位相加
满足交换律和结合律
a^a = 0 ,a^0 = a
如果a^b = c ① ,那么 b = a^c ② a = b^c
以下是第四条性质的证明
① 两边同时异或 a,即可得到②(难以想象我当时为什么想了那么久)
交换两个数
1234int a , b;a = a ^ b;b = a ^ b;a = a ^ b;
交换逻辑是上述第三点性质,值得注意的是,交换的两个值应该是内存中两块不一样的内存,所以在数组中,不能出现同一个值用这种方法比较
不用任何判断语句和比较操作,返回两个数的最大值
123456789101112131415161718192021222324252627282930313233//返回一个数的符号位 public static int sign(int n){ return flip(n << 31); } //0变1,1变0 pu ...