x和y对应位有2种情况:相同或者不相同.求平均数只需要把不同的部分相加除以2再加上相同的部分就行了.
首先考虑相同的部分,同为0没有用,x&y得出了同为1的部分.
然后考虑不同的部分
^按位异或 若参加运算的两个二进制位值相同则为0,否则为1.对应位不同可以确定其中一个是1另一个是0 二者相加还是1.所以,x^y得出了x和y所有不同位相加的结果.(x^y)>>1右移动1位相当于除2,再加上相同的部分即x&y就得出了均值.
x和y对应位有2种情况:相同或者不相同.求平均数只需要把不同的部分相加除以2再加上相同的部分就行了.
首先考虑相同的部分,同为0没有用,x&y得出了同为1的部分.
然后考虑不同的部分
^按位异或 若参加运算的两个二进制位值相同则为0,否则为1.对应位不同可以确定其中一个是1另一个是0 二者相加还是1.所以,x^y得出了x和y所有不同位相加的结果.(x^y)>>1右移动1位相当于除2,再加上相同的部分即x&y就得出了均值.