C++:为什么算平均数还可以用以下算法呢?这个是什么原理呢?

问题描述:

C++:为什么算平均数还可以用以下算法呢?这个是什么原理呢?
((x
^ y) >> 1) + (x & y);
/*(x^y)
>> 1得到x,y其中一个为1的位并除以2,x&y得到x,y都为1的部分,加一起就是平均数了*/
求大神指点

x和y对应位有2种情况:相同或者不相同.求平均数只需要把不同的部分相加除以2再加上相同的部分就行了.首先考虑相同的部分,同为0没有用,x&y得出了同为1的部分.然后考虑不同的部分^按位异或 若参加运算的两个二进制位值...