摘要:
异或是一种基于二进制的位运算,用符号XOR或者 ^ 表示,其运算法则是对运算符两侧数的每一个二进制位,同值取0,异值取1。它与布尔运算的区别在于,当运算符两侧均为1时,布尔运算的结果为1,异或运算的结果为0。简单理解就是不进位加法,如1+1=0,,0+0=0,1+0=1。性质1、交换律2、结合律(即(a^b)^c == a^(b^c))3、对于任何数x,都有x^x=0,x^0=x4、自反性 A XOR B XOR B = A xor 0 = A异或运算最常见于多项式除法,不过它最重要的性质还是自反性:A XOR B XOR B = A,即对给定的数A,用同样的运算因子(B)作两次异或运算后仍得 阅读全文
摘要:
今天看了程序员面试宝典的一道题1 int f(int x,int y)2 {3 return (x&y) + ((x^y)>>1); 4 }这道题实际就相当于把两个数相加除以2我分析了老半天才明白点道道。x&y相当于取x,y的二进制数里的相同位。x^y相当于取x,y的二进制数里的不同位。而x,y相同的部分相加除以2就是x&y,得到的结果肯定是相同二进制位为0或1,不相同的部位肯定为0.不同的部分,肯定是一个0,一个1,所以异或之后就当于0和1相加,不会产生进位,而相同的部分肯定为0.然后将两者加起来,正好就是x,y相加除以2。 阅读全文