使用位运算求平均值
使用位运算求平均值
求 a,b 的平均值
令 common_binary 为 a, b 二进制表示的 a&b 结果。
所以有:
a = common_binary + diff_binary_a
b = common_binary + diff_binary_b
(a + b) / 2 = common_binary + (diff_binary_a + diff_binary_b) / 2
(diff_binary_a + diff_binary_b) 的结果我们可以由 a^b来得到
所以
(a + b) / 2 的结果用二进制运算可以为 (a&b) + ((a^b)>>1)
因此我们有

上述计算方式会对最后结果进行下取整。
浙公网安备 33010602011771号