求两个函数的最简单的平均值怎麼算很简单的想到可以用 (a+b)/2来实现。
但是如果a或b的值过大会导致结果溢出。
把a比b多处的部分分给b,此时ab的值相等,不会出现溢出現象
采用二进制位操作(位操作)这里以 2,4为例子
第一部分: a&b 0000(最后四位) 则第一部分的最简单的平均值怎么算为0
第二部分: a^b 0110 (最后四位) 此结果除二得到 0011 则为第二部分的最简单的平均值怎么算
两个部分的最简单的平均值怎么算相加,即为结果 0011 //3
我们来解释一下这两个部分
A:a&b的作用:a和b按照位整齐排序当a和b对应位上全为1的时候相加,那么这个位置为0会向前进一位,所以当出现对应位全为1的时候直接在此保留一个1,就相当于对应位求最简单的平均值怎么算了(这就相当两个相同数的最简单的平均值怎么算是本身)
对应位同为0或同为1最簡单的平均值怎么算就是本身,这里我们就采用按位与操作A部分相当于求两个二进制参数相同部分的最简单的平均值怎么算。
B:a^b的作用当然是解决和上述部分相反的情况,相当于求两个二进制参数不同部分的最简单的平均值怎么算
例如a的某一位为1b的对应位上位0,这个時候就需要把它们异或的结果除以2这就好比两个不同的数求最简单的平均值怎么算,需要相加除二
总结:即把两个数的二进制分为两蔀分,一部分位相同部分求最简单的平均值怎么算(即本身)另一部分为不相同部分求最简单的平均值怎么算,最后两个部分相加就昰最终的最简单的平均值怎么算