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

1个回答

  • x和y对应位有2种情况:相同或者不相同.求平均数只需要把不同的部分相加除以2再加上相同的部分就行了.

    首先考虑相同的部分,同为0没有用,x&y得出了同为1的部分.

    然后考虑不同的部分

    ^按位异或 若参加运算的两个二进制位值相同则为0,否则为1.对应位不同可以确定其中一个是1另一个是0 二者相加还是1.所以,x^y得出了x和y所有不同位相加的结果.(x^y)>>1右移动1位相当于除2,再加上相同的部分即x&y就得出了均值.