使用位运算求平均值

使用位运算求平均值

求 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)

因此我们有

上述计算方式会对最后结果进行下取整。

 

posted on 2022-09-06 23:26  LambdaQ  阅读(55)  评论(0)    收藏  举报